Token Wrapped Ether

Overview ERC20

Price
$1,291.05 @ 98.855283 AVAX (+5.72%)
Fully Diluted Market Cap
Total Supply:
93,681.996927 WETH.e

Holders:
38,579 addresses

Transfers:
-

Contract:
0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB

Decimals:
18

Official Site:

Social Profiles:

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

The Avalanche Bridge Wrapped Wrapped Ether. wETH is "wrapped ETH"

Market

Volume (24H):$1,065,317,529.00
Market Capitalization:$0.00
Circulating Supply:0.00 WETH.e
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
1
Uniswap (v3)
0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$49,442,697.00
48,440,132.035 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48
0.1080%
2
Uniswap (v3)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XDAC17F958D2EE523A2206206994597C13D831EC7$1,291.42
0.0757200 Btc
$19,512,044.00
15,286.792 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
3
Uniswap (v3)
0X2260FAC5E5542A773AA44FBCFEDF7C193BC2C599-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$19,272,477.00
1,122.328 0X2260FAC5E5542A773AA44FBCFEDF7C193BC2C599
0.0000%
4
Uniswap (v3)
0X514910771AF9CA656AF840DFF83E8264ECF986CA-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,289.63
0.0755871 Btc
$14,052,816.00
1,843,145.312 0X514910771AF9CA656AF840DFF83E8264ECF986CA
0.0041%
5
Uniswap (v3)
0X4D224452801ACED8B2F0AEBE155379BB5D594381-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$11,865,567.00
2,799,421.208 0X4D224452801ACED8B2F0AEBE155379BB5D594381
0.0062%
6
Uniswap (v3)
0X1F9840A85D5AF5BF1D1762F925BDADDC4201F984-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$9,714,588.00
1,659,711.485 0X1F9840A85D5AF5BF1D1762F925BDADDC4201F984
0.0037%
7
Uniswap (v2)
0X4D224452801ACED8B2F0AEBE155379BB5D594381-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$9,378,303.00
64,831.703 0X4D224452801ACED8B2F0AEBE155379BB5D594381
0.0001%
8
Uniswap (v2)
0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,293.01
0.0757853 Btc
$7,327,775.00
7,195,021.202 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48
0.0160%
9
Uniswap (v3)
0X6B175474E89094C44DA98B954EEDEAC495271D0F-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$7,280,460.00
7,098,887.646 0X6B175474E89094C44DA98B954EEDEAC495271D0F
0.0158%
10
Uniswap (Arbitrum One)
0XFC5A1A6EB076A2C7AD06ED22C90D7E710E35AD0A-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1$1,296.34
0.0759809 Btc
$6,638,526.00
143,664.130 0XFC5A1A6EB076A2C7AD06ED22C90D7E710E35AD0A
0.0003%
11
Uniswap (v3)
0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.94
0.0757227 Btc
$4,797,220.00
5,341,900.419 0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0
0.0119%
12
KyberSwap Elastic (Ethereum)
0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.84
0.0757445 Btc
$4,764,353.00
3,395.397 0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0
0.0000%
13
Uniswap (Optimism)
0X4200000000000000000000000000000000000042-0X4200000000000000000000000000000000000006$1,290.01
0.0756098 Btc
$4,064,727.00
4,187,874.223 0X4200000000000000000000000000000000000042
0.0093%
14
Uniswap (Polygon)
0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,289.77
0.0755958 Btc
$3,625,719.00
4,061,739.413 0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270
0.0091%
15
ZigZag (Arbitrum)
WETH-USDC$1,292.25
0.0757689 Btc
$3,623,855.00
2,870.230 WETH
0.0000%
16
Uniswap (v3)
0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$3,359,894.00
2,248.682 0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0
0.0000%
17
Uniswap (v3)
0X5A98FCBEA516CF06857215779FD812CA3BEF1B32-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.18
0.0757059 Btc
$3,278,542.00
2,833,651.462 0X5A98FCBEA516CF06857215779FD812CA3BEF1B32
0.0063%
18
Uniswap (v3)
0XBE9895146F7AF43049CA1C1AE358B0541EA49704-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$3,138,730.00
2,500.077 0XBE9895146F7AF43049CA1C1AE358B0541EA49704
0.0000%
19
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XDAC17F958D2EE523A2206206994597C13D831EC7$1,291.28
0.0756843 Btc
$2,588,602.00
2,044.341 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
20
Uniswap (Polygon)
0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,289.77
0.0755958 Btc
$2,584,124.00
2,895,255.660 0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270
0.0065%
21
Uniswap (v3)
0XF4D2888D29D722226FAFA5D9B24F9164C092421E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$2,544,330.00
17,709,059.765 0XF4D2888D29D722226FAFA5D9B24F9164C092421E
0.0395%
22
Kyberswap Elastic (Arbitrum)
0X5979D7B546E38E414F7E9822514BE443A4800529-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1$1,291.45
0.0757214 Btc
$2,385,215.00
1,709.348 0X5979D7B546E38E414F7E9822514BE443A4800529
0.0000%
23
Uniswap (v2)
0XBBC2AE13B23D715C30720F079FCD9B4A74093505-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$2,342,126.00
953,063.540 0XBBC2AE13B23D715C30720F079FCD9B4A74093505
0.0021%
24
Sushiswap
0X6B3595068778DD592E39A122F4F5A5CF09C90FE2-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$2,096,085.00
1,433,623.888 0X6B3595068778DD592E39A122F4F5A5CF09C90FE2
0.0032%
25
Quickswap (v3)
0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,289.72
0.0756203 Btc
$1,995,883.00
2,237,481.725 0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270
0.0050%
26
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XC6DDDB5BC6E61E0841C54F3E723AE1F3A807260B$1,291.89
0.0757200 Btc
$1,740,671.00
4,475.677 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
27
Shibaswap
0X9813037EE2218799597D83D4A5B6F3B6778218D9-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$1,659,572.00
2,106,754.117 0X9813037EE2218799597D83D4A5B6F3B6778218D9
0.0047%
28
Uniswap (v3)
0X2B591E99AFE9F32EAA6214F7B7629768C40EEB39-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,292.03
0.0757281 Btc
$1,644,083.00
58,304,690.500 0X2B591E99AFE9F32EAA6214F7B7629768C40EEB39
0.1300%
29
Uniswap (v3)
0XF1B99E3E573A1A9C5E6B2CE818B617F0E664E86B-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$1,604,309.00
23,842.712 0XF1B99E3E573A1A9C5E6B2CE818B617F0E664E86B
0.0001%
30
Uniswap (v3)
0X9F8F72AA9304C8B593D555F12EF6589CC3A579A2-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$1,362,336.00
2,018.347 0X9F8F72AA9304C8B593D555F12EF6589CC3A579A2
0.0000%
31
Uniswap (v3)
0XC18360217D8F7AB5E7C516566761EA12CE7F9D72-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$1,291,748.00
91,042.179 0XC18360217D8F7AB5E7C516566761EA12CE7F9D72
0.0002%
32
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XE53EC727DBDEB9E2D5456C3BE40CFF031AB40A55$1,291.89
0.0757200 Btc
$1,173,878.00
970.775 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
33
Uniswap (v3)
0XAE78736CD615F374D3085123A210448E74FC6393-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,290.61
0.0756448 Btc
$1,116,134.00
803.170 0XAE78736CD615F374D3085123A210448E74FC6393
0.0000%
34
Biswap
0X2170ED0880AC9A755FD29B2688956BD959F933F8-0X55D398326F99059FF775485246999027B3197955$1,288.45
0.0755181 Btc
$1,113,975.00
883.663 0X2170ED0880AC9A755FD29B2688956BD959F933F8
0.0000%
35
Sushiswap
0XDAC17F958D2EE523A2206206994597C13D831EC7-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$1,061,549.00
1,039,922.136 0XDAC17F958D2EE523A2206206994597C13D831EC7
0.0023%
36
Uniswap (v3)
0X7FC66500C84A76AD7E9C93437BFC5AC33E2DDAE9-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$983,140.00
15,106.146 0X7FC66500C84A76AD7E9C93437BFC5AC33E2DDAE9
0.0000%
37
Uniswap (v3)
0X4A220E6096B25EADB88358CB44068A3248254675-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,289.82
0.0755983 Btc
$958,279.00
7,949.914 0X4A220E6096B25EADB88358CB44068A3248254675
0.0000%
38
Sushiswap
0X0BC529C00C6401AEF6D220BE8C6EA1667F6AD93E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$925,883.00
135.203 0X0BC529C00C6401AEF6D220BE8C6EA1667F6AD93E
0.0000%
39
Uniswap (v2)
0X71AB77B7DBB4FA7E017BC15090B2163221420282-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$911,835.00
699,462.487 0X71AB77B7DBB4FA7E017BC15090B2163221420282
0.0016%
40
Uniswap (Arbitrum One)
0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1-0XFF970A61A04B1CA14834A43F5DE4533EBDDB5CC8$1,284.92
0.0753115 Btc
$896,188.00
711.296 0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1
0.0000%
41
Uniswap (Optimism)
0X4200000000000000000000000000000000000006-0X68F180FCCE6836688E9084F035309E29BF0A2095$1,290.01
0.0756098 Btc
$886,330.00
691.461 0X4200000000000000000000000000000000000006
0.0000%
42
Uniswap (v3)
0X8E870D67F660D95D5BE530380D0EC0BD388289E1-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,271.11
0.0755400 Btc
$862,055.00
851,206.578 0X8E870D67F660D95D5BE530380D0EC0BD388289E1
0.0019%
43
Uniswap (Optimism)
0X4200000000000000000000000000000000000006-0XDA10009CBD5D07DD0CECC66161FC93D7C9000DA1$1,290.01
0.0756098 Btc
$829,660.00
658.840 0X4200000000000000000000000000000000000006
0.0000%
44
Katana
0XA8754B9FA15FC18BB59458815510E40A12CD2014-0XC99A6A985ED2CAC1EF41640596C5A5F9F4E19EF5$1,291.78
0.0757413 Btc
$825,178.00
313,305,805.000 0XA8754B9FA15FC18BB59458815510E40A12CD2014
0.6984%
45
Uniswap (v2)
0X1E4EDE388CBC9F4B5C79681B7F94D36A11ABEBC9-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$814,945.00
15,257,809.750 0X1E4EDE388CBC9F4B5C79681B7F94D36A11ABEBC9
0.0340%
46
Sushiswap (Arbitrum One)
0X539BDE0D7DBD336B79148AA742883198BBF60342-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1$1,289.51
0.0755804 Btc
$713,996.00
2,345,488.930 0X539BDE0D7DBD336B79148AA742883198BBF60342
0.0052%
47
Sushiswap
0X0F2D719407FDBEFF09D87557ABB7232601FD9F29-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,295.17
0.0759122 Btc
$691,050.00
982,366.250 0X0F2D719407FDBEFF09D87557ABB7232601FD9F29
0.0022%
48
Katana
0X97A9107C1793BC407D6F527B77E7FFF4D812BECE-0XC99A6A985ED2CAC1EF41640596C5A5F9F4E19EF5$1,283.68
0.0752664 Btc
$681,483.00
98,354.841 0X97A9107C1793BC407D6F527B77E7FFF4D812BECE
0.0002%
49
Sushiswap
0X767FE9EDC9E0DF98E07454847909B5E959D7CA0E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$678,137.00
16,167.863 0X767FE9EDC9E0DF98E07454847909B5E959D7CA0E
0.0000%
50
Uniswap (Arbitrum One)
0XFC5A1A6EB076A2C7AD06ED22C90D7E710E35AD0A-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1$1,291.89
0.0757200 Btc
$657,046.00
14,389.092 0XFC5A1A6EB076A2C7AD06ED22C90D7E710E35AD0A
0.0000%
51
Canto Dex
0X5FD55A1B9FC24967C4DB09C513C3BA0DFA7FF687-0X826551890DC65655A0ACECA109AB11ABDBD7A07B$1,290.49
0.0756655 Btc
$656,215.00
511.738 0X5FD55A1B9FC24967C4DB09C513C3BA0DFA7FF687
0.0000%
52
Uniswap (v3)
0XB62132E35A6C13EE1EE0F84DC5D40BAD8D815206-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$624,534.00
945,436.234 0XB62132E35A6C13EE1EE0F84DC5D40BAD8D815206
0.0021%
53
Uniswap (v2)
0X45804880DE22913DAFE09F4980848ECE6ECBAF78-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$608,018.00
341.052 0X45804880DE22913DAFE09F4980848ECE6ECBAF78
0.0000%
54
Uniswap (v3)
0X7B4328C127B85369D9F82CA0503B000D09CF9180-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,258.66
0.0737989 Btc
$532,277.00
395,559,086.732 0X7B4328C127B85369D9F82CA0503B000D09CF9180
0.8818%
55
Shibaswap
0X95AD61B0A150D79219DCF64E1E6CC01F0B64C4CE-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$412,175.00
43,723,136,847.630 0X95AD61B0A150D79219DCF64E1E6CC01F0B64C4CE
97.4679%
56
Sushiswap
0X5A98FCBEA516CF06857215779FD812CA3BEF1B32-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,300.35
0.0762156 Btc
$408,716.00
351,695.304 0X5A98FCBEA516CF06857215779FD812CA3BEF1B32
0.0008%
57
Osmosis
IBC/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5-UOSMO$1,292.57
0.0757596 Btc
$395,883.00
306.276 IBC/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5
0.0000%
58
Sushiswap
0X6B175474E89094C44DA98B954EEDEAC495271D0F-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$381,057.00
373,138.043 0X6B175474E89094C44DA98B954EEDEAC495271D0F
0.0008%
59
Quickswap (v3)
0XB0B195AEFA3650A6908F15CDAC7D92F8A5791B0B-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,289.72
0.0756203 Btc
$376,614.00
368,946.065 0XB0B195AEFA3650A6908F15CDAC7D92F8A5791B0B
0.0008%
60
Sushiswap (Polygon POS)
0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,293.50
0.0758141 Btc
$349,542.00
391,726.918 0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270
0.0009%
61
Uniswap (v3)
0XD533A949740BB3306D119CC777FA900BA034CD52-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$335,813.00
489,934.290 0XD533A949740BB3306D119CC777FA900BA034CD52
0.0011%
62
Sushiswap
0XDBDB4D16EDA451D0503B854CF79D55697F90C8DF-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$329,163.00
17,768.695 0XDBDB4D16EDA451D0503B854CF79D55697F90C8DF
0.0000%
63
Uniswap (v3)
0X6810E776880C02933D47DB1B9FC05908E5386B96-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$313,674.00
3,445.368 0X6810E776880C02933D47DB1B9FC05908E5386B96
0.0000%
64
Uniswap (v2)
0X949D48ECA67B17269629C7194F4B727D4EF9E5D6-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$281,806.00
661,138.989 0X949D48ECA67B17269629C7194F4B727D4EF9E5D6
0.0015%
65
Uniswap (v3)
0X419D0D8BDD9AF5E606AE2232ED285AFF190E711B-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$259,632.00
38,585,162.203 0X419D0D8BDD9AF5E606AE2232ED285AFF190E711B
0.0860%
66
Biswap
0X2170ED0880AC9A755FD29B2688956BD959F933F8-0X7130D2A12B9BCBFAE4F2634D864A1EE1CE3EAD9C$1,287.12
0.0754402 Btc
$248,922.00
195.066 0X2170ED0880AC9A755FD29B2688956BD959F933F8
0.0000%
67
Sushiswap (Arbitrum One)
0X8D9BA570D6CB60C7E3E0F31343EFE75AB8E65FB1-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1$1,295.97
0.0759866 Btc
$218,047.00
96.694 0X8D9BA570D6CB60C7E3E0F31343EFE75AB8E65FB1
0.0000%
68
Sushiswap
0XC18360217D8F7AB5E7C516566761EA12CE7F9D72-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$216,878.00
15,263.199 0XC18360217D8F7AB5E7C516566761EA12CE7F9D72
0.0000%
69
Uniswap (v3)
0X9E32B13CE7F2E80A01932B42553652E053D6ED8E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$215,321.00
11,079.647 0X9E32B13CE7F2E80A01932B42553652E053D6ED8E
0.0000%
70
VVS Finance
0XE44FD7FCB2B1581822D0C862B68222998A0C299A-0X5C7F8A570D578ED84E63FDFA7B1EE72DEAE1AE23$1,294.82
0.0758916 Btc
$211,972.00
166.388 0XE44FD7FCB2B1581822D0C862B68222998A0C299A
0.0000%
71
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XF0F9D895ACA5C8678F706FB8216FA22957685A13$1,294.23
0.0758569 Btc
$206,728.00
159.643 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
72
PancakeSwap (Ethereum)
0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$191,686.00
187,127.878 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48
0.0004%
73
Sushiswap
0X2260FAC5E5542A773AA44FBCFEDF7C193BC2C599-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$188,479.00
10.980 0X2260FAC5E5542A773AA44FBCFEDF7C193BC2C599
0.0000%
74
DeFi Swap
0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.60
0.0757026 Btc
$177,358.00
173,485.416 0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48
0.0004%
75
Uniswap (v3)
0XD33526068D116CE69F19A9EE46F0BD304F21A51F-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,298.66
0.0761446 Btc
$161,206.00
8,342.942 0XD33526068D116CE69F19A9EE46F0BD304F21A51F
0.0000%
76
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XF3B9569F82B18AEF890DE263B84189BD33EBE452$1,291.89
0.0757200 Btc
$159,332.00
124.965 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
77
ApeSwap (Polygon)
0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619$1,292.45
0.0757526 Btc
$156,112.00
174,887.650 0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270
0.0004%
78
Uniswap (v2)
0X2A3BFF78B79A009976EEA096A51A948A3DC00E34-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$144,434.00
616,668.350 0X2A3BFF78B79A009976EEA096A51A948A3DC00E34
0.0014%
79
Sushiswap
0X3432B6A60D23CA0DFCA7761B7AB56459D9C964D0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$139,258.00
28,712.522 0X3432B6A60D23CA0DFCA7761B7AB56459D9C964D0
0.0001%
80
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XCF0C122C6B73FF809C693DB761E7BAEBE62B6A2E$1,291.89
0.0757200 Btc
$135,609.00
102.400 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
81
Sushiswap
0X65EF703F5594D2573EB71AAF55BC0CB548492DF4-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$123,314.00
29,379.945 0X65EF703F5594D2573EB71AAF55BC0CB548492DF4
0.0001%
82
Katana
0XE514D9DEB7966C8BE0CA922DE8A064264EA6BCD4-0XC99A6A985ED2CAC1EF41640596C5A5F9F4E19EF5$1,291.42
0.0757200 Btc
$122,325.00
511,690.448 0XE514D9DEB7966C8BE0CA922DE8A064264EA6BCD4
0.0011%
83
Sushiswap
0X25F8087EAD173B73D6E8B84329989A8EEA16CF73-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$119,999.00
527,144.447 0X25F8087EAD173B73D6E8B84329989A8EEA16CF73
0.0012%
84
Velodrome Finance
0XE405DE8F52BA7559F9DF3C368500B6E6AE6CEE49-0X4200000000000000000000000000000000000006$1,290.00
0.0756366 Btc
$117,828.00
90.898 0XE405DE8F52BA7559F9DF3C368500B6E6AE6CEE49
0.0000%
85
Uniswap (v2)
0X4691937A7508860F876C9C0A2A617E7D9E945D4B-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$115,122.00
899,678.826 0X4691937A7508860F876C9C0A2A617E7D9E945D4B
0.0020%
86
Sushiswap
0X6399C842DD2BE3DE30BF99BC7D1BBF6FA3650E70-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$113,782.00
133,546.197 0X6399C842DD2BE3DE30BF99BC7D1BBF6FA3650E70
0.0003%
87
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XCE3F08E664693CA792CACE4AF1364D5E220827B2$1,291.89
0.0757200 Btc
$111,010.00
86.620 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
88
Sushiswap
0X514910771AF9CA656AF840DFF83E8264ECF986CA-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$107,836.00
14,118.613 0X514910771AF9CA656AF840DFF83E8264ECF986CA
0.0000%
89
Sushiswap
0XC00E94CB662C3520282E6F5717214004A7F26888-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$104,813.00
2,730.025 0XC00E94CB662C3520282E6F5717214004A7F26888
0.0000%
90
Uniswap (v2)
0X514910771AF9CA656AF840DFF83E8264ECF986CA-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$99,400.00
12,984.601 0X514910771AF9CA656AF840DFF83E8264ECF986CA
0.0000%
91
Sushiswap
0XE80C0CD204D654CEBE8DD64A4857CAB6BE8345A3-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$95,639.00
187,266,395.199 0XE80C0CD204D654CEBE8DD64A4857CAB6BE8345A3
0.4175%
92
Fraxswap (Ethereum)
0X853D955ACEF822DB058EB8505911ED77F175B99E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,292.42
0.0757789 Btc
$89,391.00
87,391.498 0X853D955ACEF822DB058EB8505911ED77F175B99E
0.0002%
93
Swapr (Xdai)
0X6A023CCD1FF6F2045C3309768EAD9E68F978F6E1-0XE91D153E0B41518A2CE8DD3D7944FA863463A97D$1,316.65
0.0771709 Btc
$87,878.00
68.016 0X6A023CCD1FF6F2045C3309768EAD9E68F978F6E1
0.0000%
94
Uniswap (v3)
0X5A98FCBEA516CF06857215779FD812CA3BEF1B32-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,301.74
0.0763253 Btc
$83,710.00
72,205.066 0X5A98FCBEA516CF06857215779FD812CA3BEF1B32
0.0002%
95
Uniswap (v3)
0X853D955ACEF822DB058EB8505911ED77F175B99E-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.42
0.0757200 Btc
$81,876.00
80,136.490 0X853D955ACEF822DB058EB8505911ED77F175B99E
0.0002%
96
DeFi Swap
0XA0B73E1FF0B80914AB6FE0444E65848C4C34450B-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$77,352.00
1,171,310.069 0XA0B73E1FF0B80914AB6FE0444E65848C4C34450B
0.0026%
97
Sushiswap
0X7FC66500C84A76AD7E9C93437BFC5AC33E2DDAE9-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$71,300.00
1,095.558 0X7FC66500C84A76AD7E9C93437BFC5AC33E2DDAE9
0.0000%
98
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XC669928185DBCE49D2230CC9B0979BE6DC797957$1,291.89
0.0757200 Btc
$31,323.00
24.355 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
99
Uniswap (v2)
0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2-0XD46BA6D942050D489DBD938A2C909A5D5039A161$1,291.89
0.0757200 Btc
$27,234.00
21.178 0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2
0.0000%
100
Uniswap (v2)
0X6243D8CEA23066D098A15582D81A598B4E8391F4-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1,291.89
0.0757200 Btc
$22,682.00
1,600.875 0X6243D8CEA23066D098A15582D81A598B4E8391F4
0.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
BridgeToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, BSD-3-Clause license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-02
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

// File: contracts/Roles.sol

pragma solidity ^0.8.0;

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account)
        internal
        view
        returns (bool)
    {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: contracts/WrappedWETH.sol

pragma solidity ^0.8.0;



contract BridgeToken is ERC20Burnable {
    using Roles for Roles.Role;

    Roles.Role private bridgeRoles;

    string private constant TOKEN_NAME = "Wrapped Ether";
    string private constant TOKEN_SYMBOL = "WETH.e";
    uint8 private constant TOKEN_DECIMALS = 18;

    struct SwapToken {
        address tokenContract;
        uint256 supply;
    }
    mapping(address => SwapToken) swapTokens;

    mapping(uint256 => bool) public chainIds;

    event Mint(
        address to,
        uint256 amount,
        address feeAddress,
        uint256 feeAmount,
        bytes32 originTxId
    );
    event Unwrap(uint256 amount, uint256 chainId);
    event AddSupportedChainId(uint256 chainId);
    event MigrateBridgeRole(address newBridgeRoleAddress);
    event AddSwapToken(address contractAddress, uint256 supplyIncrement);
    event RemoveSwapToken(address contractAddress, uint256 supplyDecrement);
    event Swap(address token, uint256 amount);

    constructor() ERC20(TOKEN_NAME, TOKEN_SYMBOL) {
        bridgeRoles.add(msg.sender);
        chainIds[0] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return TOKEN_DECIMALS;
    }

    /**
     * @dev Mint function used by bridge. Optional FeeAddress and FeeAmount parameters used to mint small percentage of transfered assets directly to bridge.
     * @param to Address to mint funds to.
     * @param amount Amount of funds to mint.
     * @param feeAddress Address to mint bridge fees to.
     * @param feeAmount Amount to mint as bridge fees.
     * @param feeAmount Amount to mint as bridge fees.
     * @param originTxId Transaction ID from external network that triggered this minting.
     */
    function mint(
        address to,
        uint256 amount,
        address feeAddress,
        uint256 feeAmount,
        bytes32 originTxId
    ) public {
        require(bridgeRoles.has(msg.sender), "Unauthorized.");
        _mint(to, amount);
        if (feeAmount > 0) {
            _mint(feeAddress, feeAmount);
        }
        emit Mint(to, amount, feeAddress, feeAmount, originTxId);
    }

    /**
     * @dev Add new chainId to list of supported Ids.
     * @param chainId ChainId to add.
     */
    function addSupportedChainId(uint256 chainId) public {
        require(bridgeRoles.has(msg.sender), "Unauthorized.");

        // Check that the chain ID is not the chain this contract is deployed on.
        uint256 currentChainId;
        assembly {
            currentChainId := chainid()
        }
        require(chainId != currentChainId, "Cannot add current chain ID.");

        // Already supported, no-op.
        if (chainIds[chainId] == true) {
            return;
        }

        chainIds[chainId] = true;
        emit AddSupportedChainId(chainId);
    }

    /**
     * @dev Burns assets and signals bridge to migrate funds to the same address on the provided chainId.
     * @param amount Amount of asset to unwrap.
     * @param chainId ChainId to unwrap or migrate funds to. Only used for multi-network bridge deployment.
     *                Zero by default for bridge deployment with only 2 networks.
     */
    function unwrap(uint256 amount, uint256 chainId) public {
        require(tx.origin == msg.sender, "Contract calls not supported.");
        require(chainIds[chainId] == true, "Chain ID not supported.");
        _burn(msg.sender, amount);
        emit Unwrap(amount, chainId);
    }

    /**
     * @dev Provide Bridge Role (Admin Role) to new address.
     * @param newBridgeRoleAddress New bridge role address.
     */
    function migrateBridgeRole(address newBridgeRoleAddress) public {
        require(bridgeRoles.has(msg.sender), "Unauthorized.");
        bridgeRoles.remove(msg.sender);
        bridgeRoles.add(newBridgeRoleAddress);
        emit MigrateBridgeRole(newBridgeRoleAddress);
    }

    /**
     * @dev Add Token to accept swaps from or increase supply of existing swap token.
     * @param contractAddress Token Address to allow swaps.
     * @param supplyIncrement Amount of assets allowed to be swapped (or incremental increase in amount).
     */
    function addSwapToken(address contractAddress, uint256 supplyIncrement)
        public
    {
        require(bridgeRoles.has(msg.sender), "Unauthorized.");
        require(isContract(contractAddress), "Address is not contract.");

        // If the swap token is not already supported, add it with the total supply of supplyIncrement.
        // Otherwise, increment the current supply.
        if (swapTokens[contractAddress].tokenContract == address(0)) {
            swapTokens[contractAddress] = SwapToken({
                tokenContract: contractAddress,
                supply: supplyIncrement
            });
        } else {
            swapTokens[contractAddress].supply =
                swapTokens[contractAddress].supply +
                supplyIncrement;
        }
        emit AddSwapToken(contractAddress, supplyIncrement);
    }

    /**
     * @dev Remove amount of swaps allowed from existing swap token.
     * @param contractAddress Token Address to remove swap amount.
     * @param supplyDecrement Amount to remove from the swap supply.
     */
    function removeSwapToken(address contractAddress, uint256 supplyDecrement)
        public
    {
        require(bridgeRoles.has(msg.sender), "Unauthorized");
        require(isContract(contractAddress), "Address is not contract.");
        require(
            swapTokens[contractAddress].tokenContract != address(0),
            "Swap token not supported"
        );

        // If the decrement is less than the current supply, decrement it from the current supply.
        // Otherwise, if the decrement is greater than or equal to the current supply, delete the mapping value.
        if (swapTokens[contractAddress].supply > supplyDecrement) {
            swapTokens[contractAddress].supply =
                swapTokens[contractAddress].supply -
                supplyDecrement;
        } else {
            delete swapTokens[contractAddress];
        }
        emit RemoveSwapToken(contractAddress, supplyDecrement);
    }

    /**
     * @dev Fetch the remaining amount allowed for a swap token.
     * @param token Address of swap token.
     * @return amount of swaps remaining.
     */
    function swapSupply(address token) public view returns (uint256) {
        return swapTokens[token].supply;
    }

    /**
     * @dev Perform Swap.
     * @param token Address of token to be swapped.
     * @param amount Amount of token to be swapped.
     */
    function swap(address token, uint256 amount) public {
        require(isContract(token), "Token is not a contract.");
        require(
            swapTokens[token].tokenContract != address(0),
            "Swap token is not a contract."
        );
        require(
            amount <= swapTokens[token].supply,
            "Swap amount is more than supply."
        );

        // Update the allowed swap amount.
        swapTokens[token].supply = swapTokens[token].supply - amount;

        // Burn the old token.
        ERC20Burnable swapToken = ERC20Burnable(
            swapTokens[token].tokenContract
        );
        swapToken.burnFrom(msg.sender, amount);

        // Mint the new token.
        _mint(msg.sender, amount);

        emit Swap(token, amount);
    }

    /**
     * @dev Check if provided address is a contract.
     * @param addr Address to check.
     * @return hasCode
     */
    function isContract(address addr) private view returns (bool hasCode) {
        uint256 length;
        assembly {
            length := extcodesize(addr)
        }
        return length > 0;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"AddSupportedChainId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"supplyIncrement","type":"uint256"}],"name":"AddSwapToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newBridgeRoleAddress","type":"address"}],"name":"MigrateBridgeRole","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"feeAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"originTxId","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"supplyDecrement","type":"uint256"}],"name":"RemoveSwapToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"Unwrap","type":"event"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"addSupportedChainId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"supplyIncrement","type":"uint256"}],"name":"addSwapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBridgeRoleAddress","type":"address"}],"name":"migrateBridgeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"feeAddress","type":"address"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"originTxId","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"supplyDecrement","type":"uint256"}],"name":"removeSwapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"swapSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506040518060400160405280600681526020017f574554482e6500000000000000000000000000000000000000000000000000008152508160039080519060200190620000969291906200027d565b508060049080519060200190620000af9291906200027d565b505050620000cd336005620000ff60201b620017251790919060201c565b60016007600080815260200190815260200160002060006101000a81548160ff02191690831515021790555062000491565b620001118282620001b260201b60201c565b1562000154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014b90620003d7565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021d90620003f9565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8280546200028b906200042c565b90600052602060002090601f016020900481019282620002af5760008555620002fb565b82601f10620002ca57805160ff1916838001178555620002fb565b82800160010185558215620002fb579182015b82811115620002fa578251825591602001919060010190620002dd565b5b5090506200030a91906200030e565b5090565b5b80821115620003295760008160009055506001016200030f565b5090565b60006200033c601f836200041b565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b60006200037e6022836200041b565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620003f2816200032d565b9050919050565b6000602082019050818103600083015262000414816200036f565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200044557607f821691505b602082108114156200045c576200045b62000462565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6131ac80620004a16000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636e286671116100b8578063a457c2d71161007c578063a457c2d714610373578063a9059cbb146103a3578063ab32dbb7146103d3578063d004f0f714610403578063dd62ed3e1461041f578063eff038301461044f57610142565b80636e286671146102d157806370a08231146102ed57806379cc67901461031d5780637c38b4571461033957806395d89b411461035557610142565b8063313ce5671161010a578063313ce56714610213578063395093511461023157806342966c68146102615780635d9898d31461027d57806366de3b361461029957806367fc19bb146102b557610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806321d93090146101b357806323b872dd146101e3575b600080fd5b61014f61046b565b60405161015c9190612bd7565b60405180910390f35b61017f600480360381019061017a91906121c1565b6104fd565b60405161018c9190612bbc565b60405180910390f35b61019d61051b565b6040516101aa9190612ef9565b60405180910390f35b6101cd60048036038101906101c89190612274565b610525565b6040516101da9190612bbc565b60405180910390f35b6101fd60048036038101906101f89190612172565b610545565b60405161020a9190612bbc565b60405180910390f35b61021b610646565b6040516102289190612f3d565b60405180910390f35b61024b600480360381019061024691906121c1565b61064f565b6040516102589190612bbc565b60405180910390f35b61027b60048036038101906102769190612274565b6106fb565b005b6102976004803603810190610292919061210d565b61070f565b005b6102b360048036038101906102ae9190612274565b6107c4565b005b6102cf60048036038101906102ca91906121fd565b6108fa565b005b6102eb60048036038101906102e6919061229d565b6109b1565b005b6103076004803603810190610302919061210d565b610acd565b6040516103149190612ef9565b60405180910390f35b610337600480360381019061033291906121c1565b610b15565b005b610353600480360381019061034e91906121c1565b610b99565b005b61035d610e98565b60405161036a9190612bd7565b60405180910390f35b61038d600480360381019061038891906121c1565b610f2a565b60405161039a9190612bbc565b60405180910390f35b6103bd60048036038101906103b891906121c1565b61101e565b6040516103ca9190612bbc565b60405180910390f35b6103ed60048036038101906103e8919061210d565b61103c565b6040516103fa9190612ef9565b60405180910390f35b61041d600480360381019061041891906121c1565b611088565b005b61043960048036038101906104349190612136565b6113d7565b6040516104469190612ef9565b60405180910390f35b610469600480360381019061046491906121c1565b61145e565b005b60606003805461047a90613090565b80601f01602080910402602001604051908101604052809291908181526020018280546104a690613090565b80156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b5050505050905090565b600061051161050a6117cd565b84846117d5565b6001905092915050565b6000600254905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60006105528484846119a0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059d6117cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490612d59565b60405180910390fd5b61063a856106296117cd565b85846106359190612fca565b6117d5565b60019150509392505050565b60006012905090565b60006106f161065c6117cd565b84846001600061066a6117cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106ec9190612f74565b6117d5565b6001905092915050565b61070c6107066117cd565b82611c1f565b50565b610723336005611df390919063ffffffff16565b610762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075990612d39565b60405180910390fd5b610776336005611ebb90919063ffffffff16565b61078a81600561172590919063ffffffff16565b7f871b00a4e20f8436702d0174eb87d84d7cd1dd5c34d4bb1b4e75438b3398d512816040516107b99190612b25565b60405180910390a150565b6107d8336005611df390919063ffffffff16565b610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90612d39565b60405180910390fd5b60004690508082141561085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085690612e59565b60405180910390fd5b600115156007600084815260200190815260200160002060009054906101000a900460ff161515141561089257506108f7565b60016007600084815260200190815260200160002060006101000a81548160ff0219169083151502179055507f677e2d9a4ed9201aa86725fef875137fc53876e6b68036b974404762682bd122826040516108ed9190612ef9565b60405180910390a1505b50565b61090e336005611df390919063ffffffff16565b61094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490612d39565b60405180910390fd5b6109578585611f62565b600082111561096b5761096a8383611f62565b5b7f918d77674bb88eaf75afb307c9723ea6037706de68d6fc07dd0c6cba423a525085858585856040516109a2959493929190612b69565b60405180910390a15050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690612c19565b60405180910390fd5b600115156007600083815260200190815260200160002060009054906101000a900460ff16151514610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90612cf9565b60405180910390fd5b610a903383611c1f565b7f37a06799a3500428a773d00284aa706101f5ad94dae9ec37e1c3773aa54c33048282604051610ac1929190612f14565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b2883610b236117cd565b6113d7565b905081811015610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490612db9565b60405180910390fd5b610b8a83610b796117cd565b8484610b859190612fca565b6117d5565b610b948383611c1f565b505050565b610bad336005611df390919063ffffffff16565b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612c79565b60405180910390fd5b610bf5826120b6565b610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90612d79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90612dd9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541115610de95780600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610d9e9190612fca565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550610e5b565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905550505b7fd3b4025ff115b79bf2ec5a73c9c784ba8aa9f8f6ba9186b255895c1a9f9042a38282604051610e8c929190612b40565b60405180910390a15050565b606060048054610ea790613090565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed390613090565b8015610f205780601f10610ef557610100808354040283529160200191610f20565b820191906000526020600020905b815481529060010190602001808311610f0357829003601f168201915b5050505050905090565b60008060016000610f396117cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90612eb9565b60405180910390fd5b6110136110016117cd565b85858461100e9190612fca565b6117d5565b600191505092915050565b600061103261102b6117cd565b84846119a0565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b611091826120b6565b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790612e99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990612e79565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154811115611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90612cd9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546112759190612fca565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166379cc679033846040518363ffffffff1660e01b815260040161135d929190612b40565b600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506113993383611f62565b7f562c219552544ec4c9d7a8eb850f80ea152973e315372bf4999fe7c953ea004f83836040516113ca929190612b40565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611472336005611df390919063ffffffff16565b6114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890612d39565b60405180910390fd5b6114ba826120b6565b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090612d79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116535760405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200182815250600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101559050506116e8565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546116a19190612f74565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b7f3e4fdfb0f47da284fe8b5b3a7e5d10b211e323c9a0c144c421ae1d211873f8538282604051611719929190612b40565b60405180910390a15050565b61172f8282611df3565b1561176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690612c39565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90612e39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90612c99565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119939190612ef9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790612e19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790612bf9565b60405180910390fd5b611a8b8383836120c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890612cb9565b60405180910390fd5b8181611b1d9190612fca565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bad9190612f74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c119190612ef9565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690612df9565b60405180910390fd5b611c9b826000836120c9565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890612c59565b60405180910390fd5b8181611d2d9190612fca565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d819190612fca565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611de69190612ef9565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b90612d99565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ec58282611df3565b611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90612d19565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990612ed9565b60405180910390fd5b611fde600083836120c9565b8060026000828254611ff09190612f74565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120459190612f74565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120aa9190612ef9565b60405180910390a35050565b600080823b905060008111915050919050565b505050565b6000813590506120dd81613131565b92915050565b6000813590506120f281613148565b92915050565b6000813590506121078161315f565b92915050565b60006020828403121561211f57600080fd5b600061212d848285016120ce565b91505092915050565b6000806040838503121561214957600080fd5b6000612157858286016120ce565b9250506020612168858286016120ce565b9150509250929050565b60008060006060848603121561218757600080fd5b6000612195868287016120ce565b93505060206121a6868287016120ce565b92505060406121b7868287016120f8565b9150509250925092565b600080604083850312156121d457600080fd5b60006121e2858286016120ce565b92505060206121f3858286016120f8565b9150509250929050565b600080600080600060a0868803121561221557600080fd5b6000612223888289016120ce565b9550506020612234888289016120f8565b9450506040612245888289016120ce565b9350506060612256888289016120f8565b9250506080612267888289016120e3565b9150509295509295909350565b60006020828403121561228657600080fd5b6000612294848285016120f8565b91505092915050565b600080604083850312156122b057600080fd5b60006122be858286016120f8565b92505060206122cf858286016120f8565b9150509250929050565b6122e281612ffe565b82525050565b6122f181613010565b82525050565b6123008161301c565b82525050565b600061231182612f58565b61231b8185612f63565b935061232b81856020860161305d565b61233481613120565b840191505092915050565b600061234c602383612f63565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123b2601d83612f63565b91507f436f6e74726163742063616c6c73206e6f7420737570706f727465642e0000006000830152602082019050919050565b60006123f2601f83612f63565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000612432602283612f63565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612498600c83612f63565b91507f556e617574686f72697a656400000000000000000000000000000000000000006000830152602082019050919050565b60006124d8602283612f63565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061253e602683612f63565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125a4602083612f63565b91507f5377617020616d6f756e74206973206d6f7265207468616e20737570706c792e6000830152602082019050919050565b60006125e4601783612f63565b91507f436861696e204944206e6f7420737570706f727465642e0000000000000000006000830152602082019050919050565b6000612624602183612f63565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061268a600d83612f63565b91507f556e617574686f72697a65642e000000000000000000000000000000000000006000830152602082019050919050565b60006126ca602883612f63565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612730601883612f63565b91507f41646472657373206973206e6f7420636f6e74726163742e00000000000000006000830152602082019050919050565b6000612770602283612f63565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127d6602483612f63565b91507f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061283c601883612f63565b91507f5377617020746f6b656e206e6f7420737570706f7274656400000000000000006000830152602082019050919050565b600061287c602183612f63565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128e2602583612f63565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612948602483612f63565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129ae601c83612f63565b91507f43616e6e6f74206164642063757272656e7420636861696e2049442e000000006000830152602082019050919050565b60006129ee601d83612f63565b91507f5377617020746f6b656e206973206e6f74206120636f6e74726163742e0000006000830152602082019050919050565b6000612a2e601883612f63565b91507f546f6b656e206973206e6f74206120636f6e74726163742e00000000000000006000830152602082019050919050565b6000612a6e602583612f63565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad4601f83612f63565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b612b1081613046565b82525050565b612b1f81613050565b82525050565b6000602082019050612b3a60008301846122d9565b92915050565b6000604082019050612b5560008301856122d9565b612b626020830184612b07565b9392505050565b600060a082019050612b7e60008301886122d9565b612b8b6020830187612b07565b612b9860408301866122d9565b612ba56060830185612b07565b612bb260808301846122f7565b9695505050505050565b6000602082019050612bd160008301846122e8565b92915050565b60006020820190508181036000830152612bf18184612306565b905092915050565b60006020820190508181036000830152612c128161233f565b9050919050565b60006020820190508181036000830152612c32816123a5565b9050919050565b60006020820190508181036000830152612c52816123e5565b9050919050565b60006020820190508181036000830152612c7281612425565b9050919050565b60006020820190508181036000830152612c928161248b565b9050919050565b60006020820190508181036000830152612cb2816124cb565b9050919050565b60006020820190508181036000830152612cd281612531565b9050919050565b60006020820190508181036000830152612cf281612597565b9050919050565b60006020820190508181036000830152612d12816125d7565b9050919050565b60006020820190508181036000830152612d3281612617565b9050919050565b60006020820190508181036000830152612d528161267d565b9050919050565b60006020820190508181036000830152612d72816126bd565b9050919050565b60006020820190508181036000830152612d9281612723565b9050919050565b60006020820190508181036000830152612db281612763565b9050919050565b60006020820190508181036000830152612dd2816127c9565b9050919050565b60006020820190508181036000830152612df28161282f565b9050919050565b60006020820190508181036000830152612e128161286f565b9050919050565b60006020820190508181036000830152612e32816128d5565b9050919050565b60006020820190508181036000830152612e528161293b565b9050919050565b60006020820190508181036000830152612e72816129a1565b9050919050565b60006020820190508181036000830152612e92816129e1565b9050919050565b60006020820190508181036000830152612eb281612a21565b9050919050565b60006020820190508181036000830152612ed281612a61565b9050919050565b60006020820190508181036000830152612ef281612ac7565b9050919050565b6000602082019050612f0e6000830184612b07565b92915050565b6000604082019050612f296000830185612b07565b612f366020830184612b07565b9392505050565b6000602082019050612f526000830184612b16565b92915050565b600081519050919050565b600082825260208201905092915050565b6000612f7f82613046565b9150612f8a83613046565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fbf57612fbe6130c2565b5b828201905092915050565b6000612fd582613046565b9150612fe083613046565b925082821015612ff357612ff26130c2565b5b828203905092915050565b600061300982613026565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561307b578082015181840152602081019050613060565b8381111561308a576000848401525b50505050565b600060028204905060018216806130a857607f821691505b602082108114156130bc576130bb6130f1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61313a81612ffe565b811461314557600080fd5b50565b6131518161301c565b811461315c57600080fd5b50565b61316881613046565b811461317357600080fd5b5056fea2646970667358221220d06f7a6b9c2ff8d19c28cf12f1a3c21cb7dbf4b0cadc28cee3dd37a51a8e3c9564736f6c63430008000033

Deployed ByteCode Sourcemap

17592:7897:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6520:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8687:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7640:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18012:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9338:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18710:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10169:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15778:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21281:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19884:587;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19353:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20845:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7811:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22939:948;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6739:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10887:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8151:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24066:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24340:801;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8389:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21842:863;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6520:100;6574:13;6607:5;6600:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6520:100;:::o;8687:169::-;8770:4;8787:39;8796:12;:10;:12::i;:::-;8810:7;8819:6;8787:8;:39::i;:::-;8844:4;8837:11;;8687:169;;;;:::o;7640:108::-;7701:7;7728:12;;7721:19;;7640:108;:::o;18012:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;9338:422::-;9444:4;9461:36;9471:6;9479:9;9490:6;9461:9;:36::i;:::-;9510:24;9537:11;:19;9549:6;9537:19;;;;;;;;;;;;;;;:33;9557:12;:10;:12::i;:::-;9537:33;;;;;;;;;;;;;;;;9510:60;;9609:6;9589:16;:26;;9581:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9671:57;9680:6;9688:12;:10;:12::i;:::-;9721:6;9702:16;:25;;;;:::i;:::-;9671:8;:57::i;:::-;9748:4;9741:11;;;9338:422;;;;;:::o;18710:105::-;18768:5;17864:2;18786:21;;18710:105;:::o;10169:215::-;10257:4;10274:80;10283:12;:10;:12::i;:::-;10297:7;10343:10;10306:11;:25;10318:12;:10;:12::i;:::-;10306:25;;;;;;;;;;;;;;;:34;10332:7;10306:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10274:8;:80::i;:::-;10372:4;10365:11;;10169:215;;;;:::o;15778:91::-;15834:27;15840:12;:10;:12::i;:::-;15854:6;15834:5;:27::i;:::-;15778:91;:::o;21281:280::-;21364:27;21380:10;21364:11;:15;;:27;;;;:::i;:::-;21356:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21420:30;21439:10;21420:11;:18;;:30;;;;:::i;:::-;21461:37;21477:20;21461:11;:15;;:37;;;;:::i;:::-;21514:39;21532:20;21514:39;;;;;;:::i;:::-;;;;;;;;21281:280;:::o;19884:587::-;19956:27;19972:10;19956:11;:15;;:27;;;;:::i;:::-;19948:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;20097:22;20172:9;20154:27;;20221:14;20210:7;:25;;20202:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20344:4;20323:25;;:8;:17;20332:7;20323:17;;;;;;;;;;;;;;;;;;;;;:25;;;20319:64;;;20365:7;;;20319:64;20415:4;20395:8;:17;20404:7;20395:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20435:28;20455:7;20435:28;;;;;;:::i;:::-;;;;;;;;19884:587;;;:::o;19353:411::-;19532:27;19548:10;19532:11;:15;;:27;;;;:::i;:::-;19524:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;19588:17;19594:2;19598:6;19588:5;:17::i;:::-;19632:1;19620:9;:13;19616:74;;;19650:28;19656:10;19668:9;19650:5;:28::i;:::-;19616:74;19705:51;19710:2;19714:6;19722:10;19734:9;19745:10;19705:51;;;;;;;;;;:::i;:::-;;;;;;;;19353:411;;;;;:::o;20845:287::-;20933:10;20920:23;;:9;:23;;;20912:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21017:4;20996:25;;:8;:17;21005:7;20996:17;;;;;;;;;;;;;;;;;;;;;:25;;;20988:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21060:25;21066:10;21078:6;21060:5;:25::i;:::-;21101:23;21108:6;21116:7;21101:23;;;;;;;:::i;:::-;;;;;;;;20845:287;;:::o;7811:127::-;7885:7;7912:9;:18;7922:7;7912:18;;;;;;;;;;;;;;;;7905:25;;7811:127;;;:::o;16188:332::-;16265:24;16292:32;16302:7;16311:12;:10;:12::i;:::-;16292:9;:32::i;:::-;16265:59;;16363:6;16343:16;:26;;16335:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16421:58;16430:7;16439:12;:10;:12::i;:::-;16472:6;16453:16;:25;;;;:::i;:::-;16421:8;:58::i;:::-;16490:22;16496:7;16505:6;16490:5;:22::i;:::-;16188:332;;;:::o;22939:948::-;23054:27;23070:10;23054:11;:15;;:27;;;;:::i;:::-;23046:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23117:27;23128:15;23117:10;:27::i;:::-;23109:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23259:1;23206:55;;:10;:27;23217:15;23206:27;;;;;;;;;;;;;;;:41;;;;;;;;;;;;:55;;;;23184:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;23581:15;23544:10;:27;23555:15;23544:27;;;;;;;;;;;;;;;:34;;;:52;23540:275;;;23721:15;23667:10;:27;23678:15;23667:27;;;;;;;;;;;;;;;:34;;;:69;;;;:::i;:::-;23613:10;:27;23624:15;23613:27;;;;;;;;;;;;;;;:34;;:123;;;;23540:275;;;23776:10;:27;23787:15;23776:27;;;;;;;;;;;;;;;;23769:34;;;;;;;;;;;;;;;;;;;;;;;23540:275;23830:49;23846:15;23863;23830:49;;;;;;;:::i;:::-;;;;;;;;22939:948;;:::o;6739:104::-;6795:13;6828:7;6821:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6739:104;:::o;10887:377::-;10980:4;10997:24;11024:11;:25;11036:12;:10;:12::i;:::-;11024:25;;;;;;;;;;;;;;;:34;11050:7;11024:34;;;;;;;;;;;;;;;;10997:61;;11097:15;11077:16;:35;;11069:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11165:67;11174:12;:10;:12::i;:::-;11188:7;11216:15;11197:16;:34;;;;:::i;:::-;11165:8;:67::i;:::-;11252:4;11245:11;;;10887:377;;;;:::o;8151:175::-;8237:4;8254:42;8264:12;:10;:12::i;:::-;8278:9;8289:6;8254:9;:42::i;:::-;8314:4;8307:11;;8151:175;;;;:::o;24066:115::-;24122:7;24149:10;:17;24160:5;24149:17;;;;;;;;;;;;;;;:24;;;24142:31;;24066:115;;;:::o;24340:801::-;24411:17;24422:5;24411:10;:17::i;:::-;24403:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24533:1;24490:45;;:10;:17;24501:5;24490:17;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:45;;;;24468:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;24635:10;:17;24646:5;24635:17;;;;;;;;;;;;;;;:24;;;24625:6;:34;;24603:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;24830:6;24803:10;:17;24814:5;24803:17;;;;;;;;;;;;;;;:24;;;:33;;;;:::i;:::-;24776:10;:17;24787:5;24776:17;;;;;;;;;;;;;;;:24;;:60;;;;24881:23;24935:10;:17;24946:5;24935:17;;;;;;;;;;;;;;;:31;;;;;;;;;;;;24881:96;;24988:9;:18;;;25007:10;25019:6;24988:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25071:25;25077:10;25089:6;25071:5;:25::i;:::-;25114:19;25119:5;25126:6;25114:19;;;;;;;:::i;:::-;;;;;;;;24340:801;;;:::o;8389:151::-;8478:7;8505:11;:18;8517:5;8505:18;;;;;;;;;;;;;;;:27;8524:7;8505:27;;;;;;;;;;;;;;;;8498:34;;8389:151;;;;:::o;21842:863::-;21954:27;21970:10;21954:11;:15;;:27;;;;:::i;:::-;21946:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;22018:27;22029:15;22018:10;:27::i;:::-;22010:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22302:1;22249:55;;:10;:27;22260:15;22249:27;;;;;;;;;;;;;;;:41;;;;;;;;;;;;:55;;;22245:391;;;22351:117;;;;;;;;22395:15;22351:117;;;;;;22437:15;22351:117;;;22321:10;:27;22332:15;22321:27;;;;;;;;;;;;;;;:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22245:391;;;22609:15;22555:10;:27;22566:15;22555:27;;;;;;;;;;;;;;;:34;;;:69;;;;:::i;:::-;22501:10;:27;22512:15;22501:27;;;;;;;;;;;;;;;:34;;:123;;;;22245:391;22651:46;22664:15;22681;22651:46;;;;;;;:::i;:::-;;;;;;;;21842:863;;:::o;16745:178::-;16823:18;16827:4;16833:7;16823:3;:18::i;:::-;16822:19;16814:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16911:4;16888;:11;;:20;16900:7;16888:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;16745:178;;:::o;4109:98::-;4162:7;4189:10;4182:17;;4109:98;:::o;14243:346::-;14362:1;14345:19;;:5;:19;;;;14337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14443:1;14424:21;;:7;:21;;;;14416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14527:6;14497:11;:18;14509:5;14497:18;;;;;;;;;;;;;;;:27;14516:7;14497:27;;;;;;;;;;;;;;;:36;;;;14565:7;14549:32;;14558:5;14549:32;;;14574:6;14549:32;;;;;;:::i;:::-;;;;;;;;14243:346;;;:::o;11754:604::-;11878:1;11860:20;;:6;:20;;;;11852:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11962:1;11941:23;;:9;:23;;;;11933:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12017:47;12038:6;12046:9;12057:6;12017:20;:47::i;:::-;12077:21;12101:9;:17;12111:6;12101:17;;;;;;;;;;;;;;;;12077:41;;12154:6;12137:13;:23;;12129:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12250:6;12234:13;:22;;;;:::i;:::-;12214:9;:17;12224:6;12214:17;;;;;;;;;;;;;;;:42;;;;12291:6;12267:9;:20;12277:9;12267:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12332:9;12315:35;;12324:6;12315:35;;;12343:6;12315:35;;;;;;:::i;:::-;;;;;;;;11754:604;;;;:::o;13311:494::-;13414:1;13395:21;;:7;:21;;;;13387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13467:49;13488:7;13505:1;13509:6;13467:20;:49::i;:::-;13529:22;13554:9;:18;13564:7;13554:18;;;;;;;;;;;;;;;;13529:43;;13609:6;13591:14;:24;;13583:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13703:6;13686:14;:23;;;;:::i;:::-;13665:9;:18;13675:7;13665:18;;;;;;;;;;;;;;;:44;;;;13736:6;13720:12;;:22;;;;;;;:::i;:::-;;;;;;;;13786:1;13760:37;;13769:7;13760:37;;;13790:6;13760:37;;;;;;:::i;:::-;;;;;;;;13311:494;;;:::o;17281:235::-;17380:4;17429:1;17410:21;;:7;:21;;;;17402:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17488:4;:11;;:20;17500:7;17488:20;;;;;;;;;;;;;;;;;;;;;;;;;17481:27;;17281:235;;;;:::o;17003:183::-;17083:18;17087:4;17093:7;17083:3;:18::i;:::-;17075:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17173:5;17150:4;:11;;:20;17162:7;17150:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;17003:183;;:::o;12640:338::-;12743:1;12724:21;;:7;:21;;;;12716:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12794:49;12823:1;12827:7;12836:6;12794:20;:49::i;:::-;12872:6;12856:12;;:22;;;;;;;:::i;:::-;;;;;;;;12911:6;12889:9;:18;12899:7;12889:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12954:7;12933:37;;12950:1;12933:37;;;12963:6;12933:37;;;;;;:::i;:::-;;;;;;;;12640:338;;:::o;25283:203::-;25339:12;25364:14;25435:4;25423:17;25413:27;;25477:1;25468:6;:10;25461:17;;;25283:203;;;:::o;15192:92::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:262::-;;550:2;538:9;529:7;525:23;521:32;518:2;;;566:1;563;556:12;518:2;609:1;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;580:117;508:196;;;;:::o;710:407::-;;;835:2;823:9;814:7;810:23;806:32;803:2;;;851:1;848;841:12;803:2;894:1;919:53;964:7;955:6;944:9;940:22;919:53;:::i;:::-;909:63;;865:117;1021:2;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;992:118;793:324;;;;;:::o;1123:552::-;;;;1265:2;1253:9;1244:7;1240:23;1236:32;1233:2;;;1281:1;1278;1271:12;1233:2;1324:1;1349:53;1394:7;1385:6;1374:9;1370:22;1349:53;:::i;:::-;1339:63;;1295:117;1451:2;1477:53;1522:7;1513:6;1502:9;1498:22;1477:53;:::i;:::-;1467:63;;1422:118;1579:2;1605:53;1650:7;1641:6;1630:9;1626:22;1605:53;:::i;:::-;1595:63;;1550:118;1223:452;;;;;:::o;1681:407::-;;;1806:2;1794:9;1785:7;1781:23;1777:32;1774:2;;;1822:1;1819;1812:12;1774:2;1865:1;1890:53;1935:7;1926:6;1915:9;1911:22;1890:53;:::i;:::-;1880:63;;1836:117;1992:2;2018:53;2063:7;2054:6;2043:9;2039:22;2018:53;:::i;:::-;2008:63;;1963:118;1764:324;;;;;:::o;2094:844::-;;;;;;2270:3;2258:9;2249:7;2245:23;2241:33;2238:2;;;2287:1;2284;2277:12;2238:2;2330:1;2355:53;2400:7;2391:6;2380:9;2376:22;2355:53;:::i;:::-;2345:63;;2301:117;2457:2;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2428:118;2585:2;2611:53;2656:7;2647:6;2636:9;2632:22;2611:53;:::i;:::-;2601:63;;2556:118;2713:2;2739:53;2784:7;2775:6;2764:9;2760:22;2739:53;:::i;:::-;2729:63;;2684:118;2841:3;2868:53;2913:7;2904:6;2893:9;2889:22;2868:53;:::i;:::-;2858:63;;2812:119;2228:710;;;;;;;;:::o;2944:262::-;;3052:2;3040:9;3031:7;3027:23;3023:32;3020:2;;;3068:1;3065;3058:12;3020:2;3111:1;3136:53;3181:7;3172:6;3161:9;3157:22;3136:53;:::i;:::-;3126:63;;3082:117;3010:196;;;;:::o;3212:407::-;;;3337:2;3325:9;3316:7;3312:23;3308:32;3305:2;;;3353:1;3350;3343:12;3305:2;3396:1;3421:53;3466:7;3457:6;3446:9;3442:22;3421:53;:::i;:::-;3411:63;;3367:117;3523:2;3549:53;3594:7;3585:6;3574:9;3570:22;3549:53;:::i;:::-;3539:63;;3494:118;3295:324;;;;;:::o;3625:118::-;3712:24;3730:5;3712:24;:::i;:::-;3707:3;3700:37;3690:53;;:::o;3749:109::-;3830:21;3845:5;3830:21;:::i;:::-;3825:3;3818:34;3808:50;;:::o;3864:118::-;3951:24;3969:5;3951:24;:::i;:::-;3946:3;3939:37;3929:53;;:::o;3988:364::-;;4104:39;4137:5;4104:39;:::i;:::-;4159:71;4223:6;4218:3;4159:71;:::i;:::-;4152:78;;4239:52;4284:6;4279:3;4272:4;4265:5;4261:16;4239:52;:::i;:::-;4316:29;4338:6;4316:29;:::i;:::-;4311:3;4307:39;4300:46;;4080:272;;;;;:::o;4358:367::-;;4521:67;4585:2;4580:3;4521:67;:::i;:::-;4514:74;;4618:34;4614:1;4609:3;4605:11;4598:55;4684:5;4679:2;4674:3;4670:12;4663:27;4716:2;4711:3;4707:12;4700:19;;4504:221;;;:::o;4731:327::-;;4894:67;4958:2;4953:3;4894:67;:::i;:::-;4887:74;;4991:31;4987:1;4982:3;4978:11;4971:52;5049:2;5044:3;5040:12;5033:19;;4877:181;;;:::o;5064:329::-;;5227:67;5291:2;5286:3;5227:67;:::i;:::-;5220:74;;5324:33;5320:1;5315:3;5311:11;5304:54;5384:2;5379:3;5375:12;5368:19;;5210:183;;;:::o;5399:366::-;;5562:67;5626:2;5621:3;5562:67;:::i;:::-;5555:74;;5659:34;5655:1;5650:3;5646:11;5639:55;5725:4;5720:2;5715:3;5711:12;5704:26;5756:2;5751:3;5747:12;5740:19;;5545:220;;;:::o;5771:310::-;;5934:67;5998:2;5993:3;5934:67;:::i;:::-;5927:74;;6031:14;6027:1;6022:3;6018:11;6011:35;6072:2;6067:3;6063:12;6056:19;;5917:164;;;:::o;6087:366::-;;6250:67;6314:2;6309:3;6250:67;:::i;:::-;6243:74;;6347:34;6343:1;6338:3;6334:11;6327:55;6413:4;6408:2;6403:3;6399:12;6392:26;6444:2;6439:3;6435:12;6428:19;;6233:220;;;:::o;6459:370::-;;6622:67;6686:2;6681:3;6622:67;:::i;:::-;6615:74;;6719:34;6715:1;6710:3;6706:11;6699:55;6785:8;6780:2;6775:3;6771:12;6764:30;6820:2;6815:3;6811:12;6804:19;;6605:224;;;:::o;6835:330::-;;6998:67;7062:2;7057:3;6998:67;:::i;:::-;6991:74;;7095:34;7091:1;7086:3;7082:11;7075:55;7156:2;7151:3;7147:12;7140:19;;6981:184;;;:::o;7171:321::-;;7334:67;7398:2;7393:3;7334:67;:::i;:::-;7327:74;;7431:25;7427:1;7422:3;7418:11;7411:46;7483:2;7478:3;7474:12;7467:19;;7317:175;;;:::o;7498:365::-;;7661:67;7725:2;7720:3;7661:67;:::i;:::-;7654:74;;7758:34;7754:1;7749:3;7745:11;7738:55;7824:3;7819:2;7814:3;7810:12;7803:25;7854:2;7849:3;7845:12;7838:19;;7644:219;;;:::o;7869:311::-;;8032:67;8096:2;8091:3;8032:67;:::i;:::-;8025:74;;8129:15;8125:1;8120:3;8116:11;8109:36;8171:2;8166:3;8162:12;8155:19;;8015:165;;;:::o;8186:372::-;;8349:67;8413:2;8408:3;8349:67;:::i;:::-;8342:74;;8446:34;8442:1;8437:3;8433:11;8426:55;8512:10;8507:2;8502:3;8498:12;8491:32;8549:2;8544:3;8540:12;8533:19;;8332:226;;;:::o;8564:322::-;;8727:67;8791:2;8786:3;8727:67;:::i;:::-;8720:74;;8824:26;8820:1;8815:3;8811:11;8804:47;8877:2;8872:3;8868:12;8861:19;;8710:176;;;:::o;8892:366::-;;9055:67;9119:2;9114:3;9055:67;:::i;:::-;9048:74;;9152:34;9148:1;9143:3;9139:11;9132:55;9218:4;9213:2;9208:3;9204:12;9197:26;9249:2;9244:3;9240:12;9233:19;;9038:220;;;:::o;9264:368::-;;9427:67;9491:2;9486:3;9427:67;:::i;:::-;9420:74;;9524:34;9520:1;9515:3;9511:11;9504:55;9590:6;9585:2;9580:3;9576:12;9569:28;9623:2;9618:3;9614:12;9607:19;;9410:222;;;:::o;9638:322::-;;9801:67;9865:2;9860:3;9801:67;:::i;:::-;9794:74;;9898:26;9894:1;9889:3;9885:11;9878:47;9951:2;9946:3;9942:12;9935:19;;9784:176;;;:::o;9966:365::-;;10129:67;10193:2;10188:3;10129:67;:::i;:::-;10122:74;;10226:34;10222:1;10217:3;10213:11;10206:55;10292:3;10287:2;10282:3;10278:12;10271:25;10322:2;10317:3;10313:12;10306:19;;10112:219;;;:::o;10337:369::-;;10500:67;10564:2;10559:3;10500:67;:::i;:::-;10493:74;;10597:34;10593:1;10588:3;10584:11;10577:55;10663:7;10658:2;10653:3;10649:12;10642:29;10697:2;10692:3;10688:12;10681:19;;10483:223;;;:::o;10712:368::-;;10875:67;10939:2;10934:3;10875:67;:::i;:::-;10868:74;;10972:34;10968:1;10963:3;10959:11;10952:55;11038:6;11033:2;11028:3;11024:12;11017:28;11071:2;11066:3;11062:12;11055:19;;10858:222;;;:::o;11086:326::-;;11249:67;11313:2;11308:3;11249:67;:::i;:::-;11242:74;;11346:30;11342:1;11337:3;11333:11;11326:51;11403:2;11398:3;11394:12;11387:19;;11232:180;;;:::o;11418:327::-;;11581:67;11645:2;11640:3;11581:67;:::i;:::-;11574:74;;11678:31;11674:1;11669:3;11665:11;11658:52;11736:2;11731:3;11727:12;11720:19;;11564:181;;;:::o;11751:322::-;;11914:67;11978:2;11973:3;11914:67;:::i;:::-;11907:74;;12011:26;12007:1;12002:3;11998:11;11991:47;12064:2;12059:3;12055:12;12048:19;;11897:176;;;:::o;12079:369::-;;12242:67;12306:2;12301:3;12242:67;:::i;:::-;12235:74;;12339:34;12335:1;12330:3;12326:11;12319:55;12405:7;12400:2;12395:3;12391:12;12384:29;12439:2;12434:3;12430:12;12423:19;;12225:223;;;:::o;12454:329::-;;12617:67;12681:2;12676:3;12617:67;:::i;:::-;12610:74;;12714:33;12710:1;12705:3;12701:11;12694:54;12774:2;12769:3;12765:12;12758:19;;12600:183;;;:::o;12789:118::-;12876:24;12894:5;12876:24;:::i;:::-;12871:3;12864:37;12854:53;;:::o;12913:112::-;12996:22;13012:5;12996:22;:::i;:::-;12991:3;12984:35;12974:51;;:::o;13031:222::-;;13162:2;13151:9;13147:18;13139:26;;13175:71;13243:1;13232:9;13228:17;13219:6;13175:71;:::i;:::-;13129:124;;;;:::o;13259:332::-;;13418:2;13407:9;13403:18;13395:26;;13431:71;13499:1;13488:9;13484:17;13475:6;13431:71;:::i;:::-;13512:72;13580:2;13569:9;13565:18;13556:6;13512:72;:::i;:::-;13385:206;;;;;:::o;13597:664::-;;13840:3;13829:9;13825:19;13817:27;;13854:71;13922:1;13911:9;13907:17;13898:6;13854:71;:::i;:::-;13935:72;14003:2;13992:9;13988:18;13979:6;13935:72;:::i;:::-;14017;14085:2;14074:9;14070:18;14061:6;14017:72;:::i;:::-;14099;14167:2;14156:9;14152:18;14143:6;14099:72;:::i;:::-;14181:73;14249:3;14238:9;14234:19;14225:6;14181:73;:::i;:::-;13807:454;;;;;;;;:::o;14267:210::-;;14392:2;14381:9;14377:18;14369:26;;14405:65;14467:1;14456:9;14452:17;14443:6;14405:65;:::i;:::-;14359:118;;;;:::o;14483:313::-;;14634:2;14623:9;14619:18;14611:26;;14683:9;14677:4;14673:20;14669:1;14658:9;14654:17;14647:47;14711:78;14784:4;14775:6;14711:78;:::i;:::-;14703:86;;14601:195;;;;:::o;14802:419::-;;15006:2;14995:9;14991:18;14983:26;;15055:9;15049:4;15045:20;15041:1;15030:9;15026:17;15019:47;15083:131;15209:4;15083:131;:::i;:::-;15075:139;;14973:248;;;:::o;15227:419::-;;15431:2;15420:9;15416:18;15408:26;;15480:9;15474:4;15470:20;15466:1;15455:9;15451:17;15444:47;15508:131;15634:4;15508:131;:::i;:::-;15500:139;;15398:248;;;:::o;15652:419::-;;15856:2;15845:9;15841:18;15833:26;;15905:9;15899:4;15895:20;15891:1;15880:9;15876:17;15869:47;15933:131;16059:4;15933:131;:::i;:::-;15925:139;;15823:248;;;:::o;16077:419::-;;16281:2;16270:9;16266:18;16258:26;;16330:9;16324:4;16320:20;16316:1;16305:9;16301:17;16294:47;16358:131;16484:4;16358:131;:::i;:::-;16350:139;;16248:248;;;:::o;16502:419::-;;16706:2;16695:9;16691:18;16683:26;;16755:9;16749:4;16745:20;16741:1;16730:9;16726:17;16719:47;16783:131;16909:4;16783:131;:::i;:::-;16775:139;;16673:248;;;:::o;16927:419::-;;17131:2;17120:9;17116:18;17108:26;;17180:9;17174:4;17170:20;17166:1;17155:9;17151:17;17144:47;17208:131;17334:4;17208:131;:::i;:::-;17200:139;;17098:248;;;:::o;17352:419::-;;17556:2;17545:9;17541:18;17533:26;;17605:9;17599:4;17595:20;17591:1;17580:9;17576:17;17569:47;17633:131;17759:4;17633:131;:::i;:::-;17625:139;;17523:248;;;:::o;17777:419::-;;17981:2;17970:9;17966:18;17958:26;;18030:9;18024:4;18020:20;18016:1;18005:9;18001:17;17994:47;18058:131;18184:4;18058:131;:::i;:::-;18050:139;;17948:248;;;:::o;18202:419::-;;18406:2;18395:9;18391:18;18383:26;;18455:9;18449:4;18445:20;18441:1;18430:9;18426:17;18419:47;18483:131;18609:4;18483:131;:::i;:::-;18475:139;;18373:248;;;:::o;18627:419::-;;18831:2;18820:9;18816:18;18808:26;;18880:9;18874:4;18870:20;18866:1;18855:9;18851:17;18844:47;18908:131;19034:4;18908:131;:::i;:::-;18900:139;;18798:248;;;:::o;19052:419::-;;19256:2;19245:9;19241:18;19233:26;;19305:9;19299:4;19295:20;19291:1;19280:9;19276:17;19269:47;19333:131;19459:4;19333:131;:::i;:::-;19325:139;;19223:248;;;:::o;19477:419::-;;19681:2;19670:9;19666:18;19658:26;;19730:9;19724:4;19720:20;19716:1;19705:9;19701:17;19694:47;19758:131;19884:4;19758:131;:::i;:::-;19750:139;;19648:248;;;:::o;19902:419::-;;20106:2;20095:9;20091:18;20083:26;;20155:9;20149:4;20145:20;20141:1;20130:9;20126:17;20119:47;20183:131;20309:4;20183:131;:::i;:::-;20175:139;;20073:248;;;:::o;20327:419::-;;20531:2;20520:9;20516:18;20508:26;;20580:9;20574:4;20570:20;20566:1;20555:9;20551:17;20544:47;20608:131;20734:4;20608:131;:::i;:::-;20600:139;;20498:248;;;:::o;20752:419::-;;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20923:248;;;:::o;21177:419::-;;21381:2;21370:9;21366:18;21358:26;;21430:9;21424:4;21420:20;21416:1;21405:9;21401:17;21394:47;21458:131;21584:4;21458:131;:::i;:::-;21450:139;;21348:248;;;:::o;21602:419::-;;21806:2;21795:9;21791:18;21783:26;;21855:9;21849:4;21845:20;21841:1;21830:9;21826:17;21819:47;21883:131;22009:4;21883:131;:::i;:::-;21875:139;;21773:248;;;:::o;22027:419::-;;22231:2;22220:9;22216:18;22208:26;;22280:9;22274:4;22270:20;22266:1;22255:9;22251:17;22244:47;22308:131;22434:4;22308:131;:::i;:::-;22300:139;;22198:248;;;:::o;22452:419::-;;22656:2;22645:9;22641:18;22633:26;;22705:9;22699:4;22695:20;22691:1;22680:9;22676:17;22669:47;22733:131;22859:4;22733:131;:::i;:::-;22725:139;;22623:248;;;:::o;22877:419::-;;23081:2;23070:9;23066:18;23058:26;;23130:9;23124:4;23120:20;23116:1;23105:9;23101:17;23094:47;23158:131;23284:4;23158:131;:::i;:::-;23150:139;;23048:248;;;:::o;23302:419::-;;23506:2;23495:9;23491:18;23483:26;;23555:9;23549:4;23545:20;23541:1;23530:9;23526:17;23519:47;23583:131;23709:4;23583:131;:::i;:::-;23575:139;;23473:248;;;:::o;23727:419::-;;23931:2;23920:9;23916:18;23908:26;;23980:9;23974:4;23970:20;23966:1;23955:9;23951:17;23944:47;24008:131;24134:4;24008:131;:::i;:::-;24000:139;;23898:248;;;:::o;24152:419::-;;24356:2;24345:9;24341:18;24333:26;;24405:9;24399:4;24395:20;24391:1;24380:9;24376:17;24369:47;24433:131;24559:4;24433:131;:::i;:::-;24425:139;;24323:248;;;:::o;24577:419::-;;24781:2;24770:9;24766:18;24758:26;;24830:9;24824:4;24820:20;24816:1;24805:9;24801:17;24794:47;24858:131;24984:4;24858:131;:::i;:::-;24850:139;;24748:248;;;:::o;25002:222::-;;25133:2;25122:9;25118:18;25110:26;;25146:71;25214:1;25203:9;25199:17;25190:6;25146:71;:::i;:::-;25100:124;;;;:::o;25230:332::-;;25389:2;25378:9;25374:18;25366:26;;25402:71;25470:1;25459:9;25455:17;25446:6;25402:71;:::i;:::-;25483:72;25551:2;25540:9;25536:18;25527:6;25483:72;:::i;:::-;25356:206;;;;;:::o;25568:214::-;;25695:2;25684:9;25680:18;25672:26;;25708:67;25772:1;25761:9;25757:17;25748:6;25708:67;:::i;:::-;25662:120;;;;:::o;25788:99::-;;25874:5;25868:12;25858:22;;25847:40;;;:::o;25893:169::-;;26011:6;26006:3;25999:19;26051:4;26046:3;26042:14;26027:29;;25989:73;;;;:::o;26068:305::-;;26127:20;26145:1;26127:20;:::i;:::-;26122:25;;26161:20;26179:1;26161:20;:::i;:::-;26156:25;;26315:1;26247:66;26243:74;26240:1;26237:81;26234:2;;;26321:18;;:::i;:::-;26234:2;26365:1;26362;26358:9;26351:16;;26112:261;;;;:::o;26379:191::-;;26439:20;26457:1;26439:20;:::i;:::-;26434:25;;26473:20;26491:1;26473:20;:::i;:::-;26468:25;;26512:1;26509;26506:8;26503:2;;;26517:18;;:::i;:::-;26503:2;26562:1;26559;26555:9;26547:17;;26424:146;;;;:::o;26576:96::-;;26642:24;26660:5;26642:24;:::i;:::-;26631:35;;26621:51;;;:::o;26678:90::-;;26755:5;26748:13;26741:21;26730:32;;26720:48;;;:::o;26774:77::-;;26840:5;26829:16;;26819:32;;;:::o;26857:126::-;;26934:42;26927:5;26923:54;26912:65;;26902:81;;;:::o;26989:77::-;;27055:5;27044:16;;27034:32;;;:::o;27072:86::-;;27147:4;27140:5;27136:16;27125:27;;27115:43;;;:::o;27164:307::-;27232:1;27242:113;27256:6;27253:1;27250:13;27242:113;;;27341:1;27336:3;27332:11;27326:18;27322:1;27317:3;27313:11;27306:39;27278:2;27275:1;27271:10;27266:15;;27242:113;;;27373:6;27370:1;27367:13;27364:2;;;27453:1;27444:6;27439:3;27435:16;27428:27;27364:2;27213:258;;;;:::o;27477:320::-;;27558:1;27552:4;27548:12;27538:22;;27605:1;27599:4;27595:12;27626:18;27616:2;;27682:4;27674:6;27670:17;27660:27;;27616:2;27744;27736:6;27733:14;27713:18;27710:38;27707:2;;;27763:18;;:::i;:::-;27707:2;27528:269;;;;:::o;27803:180::-;27851:77;27848:1;27841:88;27948:4;27945:1;27938:15;27972:4;27969:1;27962:15;27989:180;28037:77;28034:1;28027:88;28134:4;28131:1;28124:15;28158:4;28155:1;28148:15;28175:102;;28267:2;28263:7;28258:2;28251:5;28247:14;28243:28;28233:38;;28223:54;;;:::o;28283:122::-;28356:24;28374:5;28356:24;:::i;:::-;28349:5;28346:35;28336:2;;28395:1;28392;28385:12;28336:2;28326:79;:::o;28411:122::-;28484:24;28502:5;28484:24;:::i;:::-;28477:5;28474:35;28464:2;;28523:1;28520;28513:12;28464:2;28454:79;:::o;28539:122::-;28612:24;28630:5;28612:24;:::i;:::-;28605:5;28602:35;28592:2;;28651:1;28648;28641:12;28592:2;28582:79;:::o

Swarm Source

ipfs://d06f7a6b9c2ff8d19c28cf12f1a3c21cb7dbf4b0cadc28cee3dd37a51a8e3c95
Loading