From 72b0251199bf59ed0d904ffb7102b75fb7d00856 Mon Sep 17 00:00:00 2001 From: wqking Date: Sun, 6 Oct 2019 12:47:51 +0800 Subject: [PATCH 01/20] Added ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fc5c3f9d..c297c08c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ integration .idea validators.pubs +node_modules From a93a82385104ed3af5992b74e7ef54be24b466c6 Mon Sep 17 00:00:00 2001 From: wqking Date: Mon, 7 Oct 2019 08:37:05 +0800 Subject: [PATCH 02/20] Applied previous explorer to new branch to avoid troublesome merging conflicts --- .gitignore | 1 + beacon/module/app.go | 10 + explorer/block.go | 110 - explorer/cmd/synapseexplorer.go | 58 +- explorer/config.go | 224 +- explorer/explorer.go | 241 +- explorer/index.go | 87 - explorer/layout.txt | 47 - explorer/validator.go | 82 - explorer/website/.gitignore | 1 + explorer/website/backend/config/default.json | 16 + explorer/website/backend/index.js | 4 + explorer/website/backend/package-lock.json | 1995 ++++ explorer/website/backend/package.json | 20 + explorer/website/backend/src/application.js | 102 + .../src/controllers/blockcontroller.js | 51 + .../backend/src/controllers/controller.js | 48 + .../src/controllers/transactioncontroller.js | 36 + .../src/controllers/validatorcontroller.js | 37 + explorer/website/backend/src/routes.js | 43 + .../website/backend/src/templatehelpers.js | 33 + explorer/website/backend/src/util.js | 51 + explorer/website/config/default.json | 16 + explorer/website/frontend/.gitignore | 1 + .../vendor/datatables.net-dt/sort_asc.png | Bin 0 -> 160 bytes .../datatables.net-dt/sort_asc_disabled.png | Bin 0 -> 148 bytes .../vendor/datatables.net-dt/sort_both.png | Bin 0 -> 201 bytes .../vendor/datatables.net-dt/sort_desc.png | Bin 0 -> 158 bytes .../datatables.net-dt/sort_desc_disabled.png | Bin 0 -> 146 bytes explorer/website/frontend/js/app.js | 14 + explorer/website/frontend/js/util.js | 20 + explorer/website/frontend/mix-manifest.json | 4 + explorer/website/frontend/package-lock.json | 9635 +++++++++++++++++ explorer/website/frontend/package.json | 32 + explorer/website/frontend/sass/app.scss | 1 + .../frontend/views/layouts/default.hbs | 32 + .../frontend/views/pages/blockdetail.hbs | 1 + .../website/frontend/views/pages/home.hbs | 7 + .../frontend/views/pages/validators.hbs | 2 + .../frontend/views/partials/blockdetail.hbs | 9 + .../frontend/views/partials/blocktable.hbs | 70 + .../website/frontend/views/partials/test.hbs | 1 + .../views/partials/validatortable.hbs | 66 + explorer/website/frontend/webpack.mix.js | 11 + explorer/website/index.js | 4 + explorer/website/package-lock.json | 1791 +++ explorer/website/package.json | 19 + explorer/website/src/application.js | 66 + .../src/controllers/blockcontroller.js | 36 + .../website/src/controllers/controller.js | 41 + .../src/controllers/transactioncontroller.js | 36 + .../src/controllers/validatorcontroller.js | 36 + explorer/website/src/routes.js | 35 + explorer/website/src/util.js | 33 + go.mod | 5 + go.sum | 5 + testnet.json | 2058 ++++ 57 files changed, 16759 insertions(+), 625 deletions(-) delete mode 100644 explorer/block.go delete mode 100644 explorer/index.go delete mode 100644 explorer/layout.txt delete mode 100644 explorer/validator.go create mode 100644 explorer/website/.gitignore create mode 100644 explorer/website/backend/config/default.json create mode 100644 explorer/website/backend/index.js create mode 100644 explorer/website/backend/package-lock.json create mode 100644 explorer/website/backend/package.json create mode 100644 explorer/website/backend/src/application.js create mode 100644 explorer/website/backend/src/controllers/blockcontroller.js create mode 100644 explorer/website/backend/src/controllers/controller.js create mode 100644 explorer/website/backend/src/controllers/transactioncontroller.js create mode 100644 explorer/website/backend/src/controllers/validatorcontroller.js create mode 100644 explorer/website/backend/src/routes.js create mode 100644 explorer/website/backend/src/templatehelpers.js create mode 100644 explorer/website/backend/src/util.js create mode 100644 explorer/website/config/default.json create mode 100644 explorer/website/frontend/.gitignore create mode 100644 explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc.png create mode 100644 explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc_disabled.png create mode 100644 explorer/website/frontend/images/vendor/datatables.net-dt/sort_both.png create mode 100644 explorer/website/frontend/images/vendor/datatables.net-dt/sort_desc.png create mode 100644 explorer/website/frontend/images/vendor/datatables.net-dt/sort_desc_disabled.png create mode 100644 explorer/website/frontend/js/app.js create mode 100644 explorer/website/frontend/js/util.js create mode 100644 explorer/website/frontend/mix-manifest.json create mode 100644 explorer/website/frontend/package-lock.json create mode 100644 explorer/website/frontend/package.json create mode 100644 explorer/website/frontend/sass/app.scss create mode 100644 explorer/website/frontend/views/layouts/default.hbs create mode 100644 explorer/website/frontend/views/pages/blockdetail.hbs create mode 100644 explorer/website/frontend/views/pages/home.hbs create mode 100644 explorer/website/frontend/views/pages/validators.hbs create mode 100644 explorer/website/frontend/views/partials/blockdetail.hbs create mode 100644 explorer/website/frontend/views/partials/blocktable.hbs create mode 100644 explorer/website/frontend/views/partials/test.hbs create mode 100644 explorer/website/frontend/views/partials/validatortable.hbs create mode 100644 explorer/website/frontend/webpack.mix.js create mode 100644 explorer/website/index.js create mode 100644 explorer/website/package-lock.json create mode 100644 explorer/website/package.json create mode 100644 explorer/website/src/application.js create mode 100644 explorer/website/src/controllers/blockcontroller.js create mode 100644 explorer/website/src/controllers/controller.js create mode 100644 explorer/website/src/controllers/transactioncontroller.js create mode 100644 explorer/website/src/controllers/validatorcontroller.js create mode 100644 explorer/website/src/routes.js create mode 100644 explorer/website/src/util.js create mode 100644 testnet.json diff --git a/.gitignore b/.gitignore index c297c08c..42d344df 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ integration .idea validators.pubs node_modules +*.temp.* diff --git a/beacon/module/app.go b/beacon/module/app.go index dbc9898b..34e1dfbb 100644 --- a/beacon/module/app.go +++ b/beacon/module/app.go @@ -253,6 +253,16 @@ func (app *BeaconApp) GetHostNode() *p2p.HostNode { return app.hostNode } +// GetBlockchain gets the block chain +func (app *BeaconApp) GetBlockchain() *beacon.Blockchain { + return app.blockchain +} + +// GetSyncManager gets the syncManager +func (app *BeaconApp) GetSyncManager() *beacon.SyncManager { + return &app.syncManager +} + // Load user config from configure file func (app *BeaconApp) loadConfig() error { return nil diff --git a/explorer/block.go b/explorer/block.go deleted file mode 100644 index d57ced5e..00000000 --- a/explorer/block.go +++ /dev/null @@ -1,110 +0,0 @@ -package explorer - -import ( - "encoding/hex" - "fmt" - "net/http" - - "github.com/labstack/echo" - "github.com/phoreproject/synapse/chainhash" -) - -// BlockData is the data of a block that gets passed to templates. -type BlockData struct { - Slot uint64 - BlockHash string - ProposerHash string - ParentBlock string - StateRoot string - RandaoReveal string - Signature string - Attestations []AttestationData -} - -// AttestationData is the data of an attestation that gets passed to templates. -type AttestationData struct { - ParticipantHashes []string - Signature string - Slot uint64 - Shard uint64 - BeaconBlockHash string - EpochBoundaryHash string - ShardBlockHash string - LatestCrosslinkHash string - JustifiedSlot uint64 - JustifiedBlockHash string -} - -func (ex *Explorer) renderBlock(c echo.Context) error { - var b Block - - blockHashStr := c.Param("blockHash") - - blockHashHex, err := hex.DecodeString(blockHashStr) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "Block hash is not valid hex") - } - - if len(blockHashHex) != 32 { - return echo.NewHTTPError(http.StatusBadRequest, "Please provide a valid block hash.") - } - - ex.database.database.Order("slot desc").Limit(30).Where(&Block{Hash: blockHashHex}).First(&b) - - var attestations []Attestation - ex.database.database.Where(&Attestation{BlockID: b.ID}).Find(&attestations) - - attestationsData := make([]AttestationData, len(attestations)) - for i := range attestations { - participantHashesSeparate := splitHashes(attestations[i].ParticipantHashes) - - participantHashes := make([]string, len(participantHashesSeparate[i])) - - for j := range participantHashesSeparate { - participantHashes[j] = chainhash.Hash(participantHashesSeparate[j]).String() - } - - attestationsData[i] = AttestationData{ - ParticipantHashes: participantHashes, - Signature: hex.EncodeToString(attestations[i].Signature), - Slot: attestations[i].Slot, - Shard: attestations[i].Shard, - BeaconBlockHash: hex.EncodeToString(attestations[i].BeaconBlockHash), - EpochBoundaryHash: hex.EncodeToString(attestations[i].EpochBoundaryHash), - ShardBlockHash: hex.EncodeToString(attestations[i].ShardBlockHash), - LatestCrosslinkHash: hex.EncodeToString(attestations[i].LatestCrosslinkHash), - JustifiedBlockHash: hex.EncodeToString(attestations[i].JustifiedBlockHash), - JustifiedSlot: attestations[i].JustifiedSlot, - } - } - - var blockHash chainhash.Hash - copy(blockHash[:], blockHashHex) - - var proposerHash chainhash.Hash - copy(proposerHash[:], b.Proposer) - - var parentBlockHash chainhash.Hash - copy(parentBlockHash[:], b.ParentBlockHash) - - var stateRoot chainhash.Hash - copy(stateRoot[:], b.StateRoot) - - block := BlockData{ - Slot: b.Slot, - BlockHash: blockHash.String(), - ProposerHash: proposerHash.String(), - ParentBlock: parentBlockHash.String(), - StateRoot: stateRoot.String(), - RandaoReveal: fmt.Sprintf("%x", b.RandaoReveal), - Signature: fmt.Sprintf("%x", b.Signature), - Attestations: attestationsData, - } - - err = c.Render(http.StatusOK, "block.html", block) - - if err != nil { - return err - } - return err -} diff --git a/explorer/cmd/synapseexplorer.go b/explorer/cmd/synapseexplorer.go index 804848aa..cc38fa18 100644 --- a/explorer/cmd/synapseexplorer.go +++ b/explorer/cmd/synapseexplorer.go @@ -1,14 +1,8 @@ package main import ( - "flag" - "os" - "strings" - - "github.com/phoreproject/synapse/p2p" "github.com/phoreproject/synapse/utils" - "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" "github.com/phoreproject/synapse/explorer" @@ -16,18 +10,9 @@ import ( ) func main() { - chainconfig := flag.String("chainconfig", "testnet.json", "file of chain config") - resync := flag.Bool("resync", false, "resyncs the blockchain if this is set") - datadir := flag.String("datadir", "", "location to store blockchain data") - initialConnections := flag.String("connect", "", "comma separated multiaddrs") - listen := flag.String("listen", "/ip4/0.0.0.0/tcp/11781", "specifies the address to listen on") - - // Logging - level := flag.String("level", "info", "log level") - flag.Parse() - utils.CheckNTP() + config := explorer.LoadConfig() changed, newLimit, err := utils.ManageFdLimit() if err != nil { panic(err) @@ -36,46 +21,7 @@ func main() { logrus.Infof("changed ulimit to: %d", newLimit) } - lvl, err := logrus.ParseLevel(*level) - if err != nil { - panic(err) - } - logrus.SetLevel(lvl) - - db, err := gorm.Open("sqlite3", "/tmp/gorm.db") - if err != nil { - panic(err) - } - defer db.Close() - - // we should load the keys from the validator keystore - f, err := os.Open(*chainconfig) - if err != nil { - panic(err) - } - - explorerConfig, err := explorer.ReadChainFileToConfig(f) - if err != nil { - panic(err) - } - - err = f.Close() - if err != nil { - panic(err) - } - - initialPeers, err := p2p.ParseInitialConnections(strings.Split(*initialConnections, ",")) - if err != nil { - panic(err) - } - - explorerConfig.DiscoveryOptions.PeerAddresses = append(explorerConfig.DiscoveryOptions.PeerAddresses, initialPeers...) - - explorerConfig.DataDirectory = *datadir - explorerConfig.Resync = *resync - explorerConfig.ListeningAddress = *listen - - ex, err := explorer.NewExplorer(*explorerConfig, db) + ex, err := explorer.NewExplorer(config) if err != nil { panic(err) } diff --git a/explorer/config.go b/explorer/config.go index 25b3f59f..f40e2edb 100644 --- a/explorer/config.go +++ b/explorer/config.go @@ -1,109 +1,179 @@ package explorer import ( - "encoding/hex" "encoding/json" - "fmt" - "io" + "flag" + "os" + "strings" - "github.com/phoreproject/synapse/primitives" - - peerstore "github.com/libp2p/go-libp2p-peerstore" - multiaddr "github.com/multiformats/go-multiaddr" - "github.com/phoreproject/synapse/beacon/config" + "github.com/phoreproject/synapse/beacon/module" "github.com/phoreproject/synapse/p2p" - - beaconapp "github.com/phoreproject/synapse/beacon/module" ) -// Config is the explorer app config. +// Config is the explorer config type Config struct { - GenesisTime uint64 - DataDirectory string - InitialValidatorList []primitives.InitialValidatorEntry - NetworkConfig *config.Config - Resync bool - ListeningAddress string - DiscoveryOptions p2p.DiscoveryOptions + ConfigFileName string `json:"config,omitempty"` + DbDriver string `json:"dbdriver,omitempty"` + DbHost string `json:"dbhost,omitempty"` + DbDatabase string `json:"dbdatabase,omitempty"` + DbUser string `json:"dbuser,omitempty"` + DbPassword string `json:"dbpassword,omitempty"` + + ChainConfig string `json:"chainconfig,omitempty"` + Resync bool `json:"resync,omitempty"` + DataDir string `json:"datadir,omitempty"` + Connect string `json:"connect,omitempty"` + Listen string `json:"listen,omitempty"` + + Level string `json:"level,omitempty"` + + appConfig *module.Config } -// GenerateConfigFromChainConfig generates a new config from the passed in network config -// which should be loaded from a JSON file. -func GenerateConfigFromChainConfig(chainConfig beaconapp.ChainConfig) (*Config, error) { - c := Config{ - GenesisTime: chainConfig.GenesisTime, +func newConfig() *Config { + return &Config{} +} + +func loadConfigFromFile(fileName string, config *Config) error { + if _, err := os.Stat(fileName); os.IsNotExist(err) { + return err } - c.InitialValidatorList = make([]primitives.InitialValidatorEntry, chainConfig.InitialValidators.NumValidators) - for i := range c.InitialValidatorList { - validator := chainConfig.InitialValidators.Validators[i] + f, err := os.Open(fileName) + if err != nil { + return err + } + defer f.Close() - pubKeyBytes, err := hex.DecodeString(validator.PubKey) - if err != nil { - return nil, err - } - var pubKey [96]byte - copy(pubKey[:], pubKeyBytes) + d := json.NewDecoder(f) + return d.Decode(&config) +} - sigBytes, err := hex.DecodeString(validator.ProofOfPossession) - if err != nil { - return nil, err - } - var signature [48]byte - copy(signature[:], sigBytes) +func loadConfigFromCommandLine(config *Config) { + configFile := flag.String("config", "synapseexplorer.cfg", "Config file name") + dbdriver := flag.String("dbdriver", "sqlite", "Database driver, the value can be sqlite, mysql") + dbhost := flag.String("dbhost", "synapseexplorer.sqlite", "Database host") + dbdatabase := flag.String("dbdatabase", "synapseexplorer.sqlite", "Database name") + dbuser := flag.String("dbuser", "synapseexplorer.sqlite", "Database user name") + dbpassword := flag.String("dbpassword", "synapseexplorer.sqlite", "Database password") + + chainconfig := flag.String("chainconfig", "testnet.json", "file of chain config") + resync := flag.Bool("resync", false, "resyncs the blockchain if this is set") + datadir := flag.String("datadir", "", "location to store blockchain data") + connect := flag.String("connect", "", "comma separated multiaddrs") + listen := flag.String("listen", "/ip4/0.0.0.0/tcp/11781", "specifies the address to listen on") + + level := flag.String("level", "info", "log level") + flag.Parse() + + config.ConfigFileName = *configFile + config.DbDriver = *dbdriver + config.DbHost = *dbhost + config.DbDatabase = *dbdatabase + config.DbUser = *dbuser + config.DbPassword = *dbpassword + + config.ChainConfig = *chainconfig + config.Resync = *resync + config.DataDir = *datadir + config.Connect = *connect + config.Listen = *listen + config.Level = *level +} - withdrawalCredentialsBytes, err := hex.DecodeString(validator.WithdrawalCredentials) - if err != nil { - return nil, err - } - var withdrawalCredentials [32]byte - copy(withdrawalCredentials[:], withdrawalCredentialsBytes) - - c.InitialValidatorList[i] = primitives.InitialValidatorEntry{ - PubKey: pubKey, - ProofOfPossession: signature, - WithdrawalCredentials: withdrawalCredentials, - WithdrawalShard: validator.WithdrawalShard, - DepositSize: validator.DepositSize, +func isFlagPassed(name string) bool { + found := false + flag.Visit(func(f *flag.Flag) { + if f.Name == name { + found = true } + }) + return found +} + +func mergeConfigFromConfigFile(config *Config) { + if config.ConfigFileName == "" { + return + } + + configFromFile := newConfig() + err := loadConfigFromFile(config.ConfigFileName, configFromFile) + if err != nil { + return + } + + if !isFlagPassed("dbdriver") { + config.DbDriver = configFromFile.DbDriver + } + if !isFlagPassed("dbhost") { + config.DbHost = configFromFile.DbHost } + if !isFlagPassed("dbdatabase") { + config.DbDatabase = configFromFile.DbDatabase + } + if !isFlagPassed("dbuser") { + config.DbUser = configFromFile.DbUser + } + if !isFlagPassed("dbpassword") { + config.DbPassword = configFromFile.DbPassword + } + if !isFlagPassed("chainconfig") { + config.ChainConfig = configFromFile.ChainConfig + } + if !isFlagPassed("resync") { + config.Resync = configFromFile.Resync + } + if !isFlagPassed("datadir") { + config.DataDir = configFromFile.DataDir + } + if !isFlagPassed("connect") { + config.Connect = configFromFile.Connect + } + if !isFlagPassed("listen") { + config.Listen = configFromFile.Listen + } + if !isFlagPassed("level") { + config.Level = configFromFile.Level + } +} - c.GenesisTime = chainConfig.GenesisTime +// LoadConfig loads the config +func LoadConfig() *Config { + config := newConfig() - c.DiscoveryOptions = p2p.NewDiscoveryOptions() + loadConfigFromCommandLine(config) + mergeConfigFromConfigFile(config) - c.DiscoveryOptions.PeerAddresses = make([]peerstore.PeerInfo, len(chainConfig.BootstrapPeers)) + prepareConfig(config) - networkConfig, found := config.NetworkIDs[chainConfig.NetworkID] - if !found { - return nil, fmt.Errorf("error getting network config for ID: %s", chainConfig.NetworkID) + return config +} + +func prepareConfig(config *Config) { + f, err := os.Open(config.ChainConfig) + if err != nil { + panic(err) } - c.NetworkConfig = &networkConfig - for i := range c.DiscoveryOptions.PeerAddresses { - a, err := multiaddr.NewMultiaddr(chainConfig.BootstrapPeers[i]) - if err != nil { - return nil, err - } - peerInfo, err := peerstore.InfoFromP2pAddr(a) - if err != nil { - return nil, err - } - c.DiscoveryOptions.PeerAddresses[i] = *peerInfo + appConfig, err := module.ReadChainFileToConfig(f) + if err != nil { + panic(err) } - return &c, nil -} + err = f.Close() + if err != nil { + panic(err) + } -// ReadChainFileToConfig reads a network config from the reader. -func ReadChainFileToConfig(r io.Reader) (*Config, error) { - var networkConfig beaconapp.ChainConfig + appConfig.DataDirectory = config.DataDir + appConfig.Resync = config.Resync + appConfig.ListeningAddress = config.Listen - d := json.NewDecoder(r) - err := d.Decode(&networkConfig) + initialPeers, err := p2p.ParseInitialConnections(strings.Split(config.Connect, ",")) if err != nil { - return nil, err + panic(err) } + appConfig.DiscoveryOptions.PeerAddresses = append(appConfig.DiscoveryOptions.PeerAddresses, initialPeers...) - return GenerateConfigFromChainConfig(networkConfig) + config.appConfig = appConfig } diff --git a/explorer/explorer.go b/explorer/explorer.go index 1cca12de..a3a007fa 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -1,31 +1,28 @@ package explorer import ( - "crypto/rand" "encoding/binary" - "io" + "fmt" "os" "os/signal" + "strconv" + "strings" "syscall" - "text/template" "time" - "github.com/libp2p/go-libp2p-core/crypto" "github.com/phoreproject/synapse/chainhash" "github.com/phoreproject/synapse/primitives" "github.com/prysmaticlabs/go-ssz" "github.com/jinzhu/gorm" - homedir "github.com/mitchellh/go-homedir" - ma "github.com/multiformats/go-multiaddr" - "github.com/phoreproject/synapse/beacon" - "github.com/phoreproject/synapse/beacon/config" - "github.com/phoreproject/synapse/beacon/db" - "github.com/phoreproject/synapse/p2p" + // blank import + _ "github.com/jinzhu/gorm/dialects/mysql" + _ "github.com/jinzhu/gorm/dialects/postgres" + _ "github.com/jinzhu/gorm/dialects/sqlite" + "github.com/phoreproject/synapse/beacon/config" + "github.com/phoreproject/synapse/beacon/module" logger "github.com/sirupsen/logrus" - - "github.com/labstack/echo" ) // Explorer is a blockchain explorer. @@ -33,130 +30,89 @@ import ( // and then keeps track of its own blockchain so that it can access more // info like forking. type Explorer struct { - blockchain *beacon.Blockchain + app *module.BeaconApp - // P2P - hostNode *p2p.HostNode - syncManager beacon.SyncManager + config *Config - config Config + db *gorm.DB database *Database - chainDB db.Database -} - -// NewExplorer creates a new block explorer -func NewExplorer(c Config, gormDB *gorm.DB) (*Explorer, error) { - return &Explorer{ - database: NewDatabase(gormDB), - config: c, - }, nil } -func (ex *Explorer) loadDatabase() error { - var dir string - if ex.config.DataDirectory == "" { - dataDir, err := config.GetBaseDirectory(true) - if err != nil { - panic(err) +func createDb(c *Config) *gorm.DB { + var db *gorm.DB + var err error + switch c.DbDriver { + case "sqlite": + db, err = gorm.Open("sqlite3", c.DbDatabase) + break + + case "mysql": + passwordText := "" + if c.DbPassword != "" { + passwordText = fmt.Sprintf(":%s", c.DbPassword) } - dir = dataDir - } else { - d, err := homedir.Expand(ex.config.DataDirectory) - if err != nil { - panic(err) - } - dir = d + dbText := fmt.Sprintf( + "%s%s@(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + c.DbUser, + passwordText, + c.DbHost, + c.DbDatabase) + db, err = gorm.Open("mysql", dbText) + break + + case "postgres": + db, err = gorm.Open( + "postgres", + fmt.Sprintf( + "host=%s port=5432 user=%s dbname=%s password=%s", + c.DbHost, + c.DbUser, + c.DbDatabase, + c.DbPassword)) + break } - - err := os.MkdirAll(dir, 0777) if err != nil { panic(err) } - - logger.Info("initializing client") - - logger.Info("initializing database") - database := db.NewBadgerDB(dir) - - if ex.config.Resync { - logger.Info("dropping all keys in database to resync") - err := database.Flush() - if err != nil { - return err - } - } - - ex.chainDB = database - - return nil + return db } -func (ex *Explorer) loadP2P() error { - logger.Info("loading P2P") - addr, err := ma.NewMultiaddr(ex.config.ListeningAddress) - if err != nil { - panic(err) - } - - priv, pub, err := crypto.GenerateEd25519Key(rand.Reader) - if err != nil { - panic(err) - } - - hostNode, err := p2p.NewHostNode(addr, pub, priv, ex.config.DiscoveryOptions, 16*time.Second, 16, 8*time.Second, ex.blockchain) - if err != nil { - panic(err) - } - ex.hostNode = hostNode - - logger.Debug("starting peer discovery") - err = ex.hostNode.StartDiscovery() +// NewExplorer creates a new block explorer +func NewExplorer(c *Config) (*Explorer, error) { + db := createDb(c) + + beaconConfig := config.Options{} + beaconConfig.Resync = c.Resync + beaconConfig.ChainCFG = c.ChainConfig + beaconConfig.DataDir = c.DataDir + beaconConfig.GenesisTime = strconv.FormatUint(c.appConfig.GenesisTime, 10) + beaconConfig.InitialConnections = strings.Split(c.Connect, ",") + beaconConfig.P2PListen = c.Listen + beaconConfig.RPCListen = c.Listen + app, err := module.NewBeaconApp(beaconConfig) if err != nil { panic(err) } - return nil -} - -func (ex *Explorer) loadBlockchain() error { - var genesisTime uint64 - if t, err := ex.chainDB.GetGenesisTime(); err == nil { - logger.WithField("genesisTime", t).Info("using time from database") - genesisTime = t - } else { - logger.WithField("genesisTime", ex.config.GenesisTime).Info("using time from config") - err := ex.chainDB.SetGenesisTime(ex.config.GenesisTime) - if err != nil { - return err - } - genesisTime = ex.config.GenesisTime + ex := &Explorer{ + app: app, + db: db, + database: NewDatabase(db), + config: c, } - - blockchain, err := beacon.NewBlockchainWithInitialValidators(ex.chainDB, ex.config.NetworkConfig, ex.config.InitialValidatorList, true, genesisTime) + lvl, err := logger.ParseLevel(c.Level) if err != nil { panic(err) } - - ex.blockchain = blockchain - - return nil -} - -// Template is the template engine used by the explorer. -type Template struct { - templates *template.Template -} - -// Render renders the template. -func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error { - return t.templates.ExecuteTemplate(w, name, data) + logger.SetLevel(lvl) + return ex, nil } // WaitForConnections waits until beacon app is connected func (ex *Explorer) WaitForConnections(numConnections int) { for { - if ex.hostNode.PeersConnected() >= numConnections { + if ex.app.GetHostNode().PeersConnected() >= numConnections { break } time.Sleep(100 * time.Millisecond) @@ -229,15 +185,15 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S var epochCount int - epochStart := state.Slot - (state.Slot % ex.config.NetworkConfig.EpochLength) + epochStart := state.Slot - (state.Slot % ex.config.appConfig.NetworkConfig.EpochLength) ex.database.database.Model(&Epoch{}).Where(&Epoch{StartSlot: epochStart}).Count(&epochCount) if epochCount == 0 { var assignments []Assignment - for i := epochStart; i < epochStart+ex.config.NetworkConfig.EpochLength; i++ { - assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.NetworkConfig) + for i := epochStart; i < epochStart+ex.config.appConfig.NetworkConfig.EpochLength; i++ { + assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.appConfig.NetworkConfig) if err != nil { panic(err) } @@ -274,7 +230,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S panic(err) } - proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber, ex.blockchain.GetConfig()) + proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber, ex.app.GetBlockchain().GetConfig()) if err != nil { panic(err) } @@ -298,7 +254,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S // Update attestations for _, att := range block.BlockBody.Attestations { - participants, err := state.GetAttestationParticipants(att.Data, att.ParticipationBitfield, ex.config.NetworkConfig) + participants, err := state.GetAttestationParticipants(att.Data, att.ParticipationBitfield, ex.config.appConfig.NetworkConfig) if err != nil { panic(err) } @@ -332,25 +288,13 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S } func (ex *Explorer) exit() { - err := ex.chainDB.Close() - if err != nil { - panic(err) - } - - for _, p := range ex.hostNode.GetPeerList() { - p.Disconnect() - } + ex.app.Exit() os.Exit(0) } // StartExplorer starts the block explorer func (ex *Explorer) StartExplorer() error { - err := ex.loadDatabase() - if err != nil { - return err - } - signalHandler := make(chan os.Signal, 1) signal.Notify(signalHandler, os.Interrupt, syscall.SIGTERM) @@ -360,46 +304,11 @@ func (ex *Explorer) StartExplorer() error { ex.exit() }() - err = ex.loadBlockchain() - if err != nil { - return err - } - - err = ex.loadP2P() - if err != nil { - return err - } - - ex.syncManager = beacon.NewSyncManager(ex.hostNode, ex.blockchain, nil) - - ex.syncManager.RegisterPostProcessHook(ex.postProcessHook) - - ex.syncManager.Start() - - ex.WaitForConnections(1) - - go ex.syncManager.TryInitialSync() - - go func() { - err := ex.syncManager.ListenForBlocks() - if err != nil { - logger.Errorf("error listening for blocks: %s", err) - } - }() - - t := &Template{ - templates: template.Must(template.ParseGlob("explorer/templates/*.html")), - } - - e := echo.New() - e.Renderer = t + ex.app.GetSyncManager().RegisterPostProcessHook(ex.postProcessHook) - e.Static("/static", "assets") - e.GET("/", ex.renderIndex) - e.GET("/b/:blockHash", ex.renderBlock) - e.GET("/v/:validatorHash", ex.renderValidator) + logger.Info("Ready to run.") - e.Logger.Fatal(e.Start(":1323")) + ex.app.Run() return nil } diff --git a/explorer/index.go b/explorer/index.go deleted file mode 100644 index b315a91e..00000000 --- a/explorer/index.go +++ /dev/null @@ -1,87 +0,0 @@ -package explorer - -import ( - "fmt" - "net/http" - - "github.com/labstack/echo" - "github.com/phoreproject/synapse/chainhash" -) - -// TransactionData is the data of a transaction that gets passed to templates. -type TransactionData struct { - Recipient string - Amount int64 - Slot uint64 -} - -// ProposerData is the data of a proposer that gets passed to templates. -type ProposerData struct { - Slot uint64 - Validator string -} - -// IndexData is the data that gets sent to the index page. -type IndexData struct { - Blocks []BlockData - Transactions []TransactionData -} - -func (ex *Explorer) renderIndex(c echo.Context) error { - blocks := make([]BlockData, 0) - - var dbBlocks []Block - - ex.database.database.Order("slot desc").Limit(30).Find(&dbBlocks) - - for _, b := range dbBlocks { - var blockHash chainhash.Hash - copy(blockHash[:], b.Hash) - - var proposerHash chainhash.Hash - copy(proposerHash[:], b.Proposer) - - var parentBlockHash chainhash.Hash - copy(parentBlockHash[:], b.ParentBlockHash) - - var stateRoot chainhash.Hash - copy(stateRoot[:], b.StateRoot) - - blocks = append(blocks, BlockData{ - Slot: b.Slot, - BlockHash: blockHash.String(), - ProposerHash: proposerHash.String(), - ParentBlock: parentBlockHash.String(), - StateRoot: stateRoot.String(), - RandaoReveal: fmt.Sprintf("%x", b.RandaoReveal), - Signature: fmt.Sprintf("%x", b.Signature), - }) - } - - transactions := make([]TransactionData, 0) - - var dbTransactions []Transaction - - ex.database.database.Select("recipient_hash, amount, slot").Order("slot desc").Limit(30).Find(&dbTransactions) - - for _, t := range dbTransactions { - var recipientHash chainhash.Hash - copy(recipientHash[:], t.RecipientHash) - - transactions = append(transactions, TransactionData{ - Slot: t.Slot, - Amount: t.Amount, - Recipient: recipientHash.String(), - }) - } - - err := c.Render(http.StatusOK, "index.html", IndexData{ - Blocks: blocks, - Transactions: transactions, - }) - - if err != nil { - return err - } - return err -} diff --git a/explorer/layout.txt b/explorer/layout.txt deleted file mode 100644 index 1f5c43d9..00000000 --- a/explorer/layout.txt +++ /dev/null @@ -1,47 +0,0 @@ -Front page -- shows latest blocks -- shows latest transactions -- active validators -- most recent proposers - -Block page -- Attestations -- Parent block -- State root -- Randao Reveal -- Hash -- Slot -- Epoch -- Proposer - -Epoch -- Transactions -- Start Slot -- Committees - -Transaction -- Amount -- Recipient validator -- Type -- Slot - -Attestation -- Participant validators -- Signature -- Slot -- Shard -- Beacon block hash -- Epoch boundary hash -- Shard block hash -- Latest crosslink hash -- Justified slot -- Justified block hash - -Validator -- pubkey -- withdrawal credentials -- status -- latest status change slot -- exit count -- validator ID -- validator hash diff --git a/explorer/validator.go b/explorer/validator.go deleted file mode 100644 index 62d667ef..00000000 --- a/explorer/validator.go +++ /dev/null @@ -1,82 +0,0 @@ -package explorer - -import ( - "encoding/hex" - "net/http" - - "github.com/labstack/echo" -) - -// ValidatorData is the data of a validator passed to explorer templates. -type ValidatorData struct { - Pubkey string - WithdrawalCredentials string - Status uint64 - LatestStatusChangeSlot uint64 - ExitCount uint64 - ValidatorID uint64 - ValidatorHash string - Attestations []AttestationData -} - -func (ex *Explorer) renderValidator(c echo.Context) error { - var v Validator - - validatorHashStr := c.Param("validatorHash") - - validatorHashHex, err := hex.DecodeString(validatorHashStr) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "Block hash is not valid hex") - } - - if len(validatorHashHex) != 32 { - return echo.NewHTTPError(http.StatusBadRequest, "Please provide a valid block hash.") - } - - ex.database.database.Where(&Validator{ValidatorHash: validatorHashHex}).First(&v) - - //var attestations []Attestation - //ex.database.database.Where("participant_hashes LIKE ?", validatorHashHex).Find(&attestations) - // - //attestationsData := make([]AttestationData, len(attestations)) - //for i := range attestations { - // participantHashesSeparate := splitHashes(attestations[i].ParticipantHashes) - // - // participantHashes := make([]string, len(participantHashesSeparate[i])) - // - // for j := range participantHashesSeparate { - // participantHashes[j] = chainhash.Hash(participantHashesSeparate[j]).String() - // } - // - // attestationsData[i] = AttestationData{ - // ParticipantHashes: participantHashes, - // Signature: hex.EncodeToString(attestations[i].Signature), - // Slot: attestations[i].Slot, - // Shard: attestations[i].Shard, - // BeaconBlockHash: hex.EncodeToString(attestations[i].BeaconBlockHash), - // EpochBoundaryHash: hex.EncodeToString(attestations[i].EpochBoundaryHash), - // ShardBlockHash: hex.EncodeToString(attestations[i].ShardBlockHash), - // LatestCrosslinkHash: hex.EncodeToString(attestations[i].LatestCrosslinkHash), - // JustifiedBlockHash: hex.EncodeToString(attestations[i].JustifiedBlockHash), - // JustifiedSlot: attestations[i].JustifiedSlot, - // } - //} - - validator := ValidatorData{ - Pubkey: hex.EncodeToString(v.Pubkey), - WithdrawalCredentials: hex.EncodeToString(v.WithdrawalCredentials), - Status: v.Status, - LatestStatusChangeSlot: v.LatestStatusChangeSlot, - ExitCount: v.ExitCount, - ValidatorID: v.ValidatorID, - ValidatorHash: hex.EncodeToString(validatorHashHex), - //Attestations: attestationsData, - } - - err = c.Render(http.StatusOK, "validator.html", validator) - - if err != nil { - return err - } - return err -} diff --git a/explorer/website/.gitignore b/explorer/website/.gitignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/explorer/website/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/explorer/website/backend/config/default.json b/explorer/website/backend/config/default.json new file mode 100644 index 00000000..d76eb7bc --- /dev/null +++ b/explorer/website/backend/config/default.json @@ -0,0 +1,16 @@ +{ + "database" : { + "driver" : "mysql2", + "host" : "localhost", + "port" : 3306, + "user" : "root", + "password" : "", + "database" : "synapse" + }, + + "server" : { + "comment" : "the port the web server listens on", + "port" : 3000 + } +} + diff --git a/explorer/website/backend/index.js b/explorer/website/backend/index.js new file mode 100644 index 00000000..f35be68e --- /dev/null +++ b/explorer/website/backend/index.js @@ -0,0 +1,4 @@ +const Application = require('./src/application').Application; + +var app = new Application() +app.run() diff --git a/explorer/website/backend/package-lock.json b/explorer/website/backend/package-lock.json new file mode 100644 index 00000000..89b75f6a --- /dev/null +++ b/explorer/website/backend/package-lock.json @@ -0,0 +1,1995 @@ +{ + "name": "website", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha1-qNCv1zJR7/u9X+OEp31zADwXpx8=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha1-H5Q+WjV/rBC04PWq7zsUzcGvbsc=" + }, + "commander": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", + "integrity": "sha1-RZWuw1MFJeZx+2+F+xc9+P+L9Xo=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "config": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/config/-/config-3.2.2.tgz", + "integrity": "sha1-x9MbsqnTABOpBf9CAQHjsbpY7q0=", + "requires": { + "json5": "^1.0.1" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha1-Z0T/dkHBSMP4ppwwflEjXB9KN88=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-handlebars": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.1.0.tgz", + "integrity": "sha512-7QlaXnSREMmN5P2o4gmpUZDfJlLtfBka9d6r7/ccXaU7rPp76odw9YYtwZYdIiha2JqwiaG6o2Wu6NZJQ0u7Fg==", + "requires": { + "glob": "^7.1.3", + "graceful-fs": "^4.1.2", + "handlebars": "^4.1.2", + "object.assign": "^4.1.0", + "promise": "^8.0.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha1-F7EI+e5RLft6XH88iyfqnhqcCNE=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha1-8GlhdpDBDIaOc7hGV0Z2T5fDR58=", + "requires": { + "is-property": "^1.0.2" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getopts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", + "integrity": "sha1-Z6D+RxysucaH2BfKtkULlt3oMTs=" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "handlebars": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.3.tgz", + "integrity": "sha512-VupOxR91xcGojfINrzMqrvlyYbBs39sXIrWa7YdaQWeBudOlvKEGvCczMfJPgnuwHE/zyH1M6J+IUP6cgDVyxg==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha1-Wc3eCiopfMKusMZEWhle6J8SdVA=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "requires": { + "minimist": "^1.2.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + }, + "knex": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.19.4.tgz", + "integrity": "sha1-z2L4gkOSOHFSoKGIplhdXepoMrs=", + "requires": { + "bluebird": "^3.5.5", + "colorette": "1.1.0", + "commander": "^3.0.1", + "debug": "4.1.1", + "getopts": "2.2.5", + "inherits": "~2.0.4", + "interpret": "^1.2.0", + "liftoff": "3.1.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "pg-connection-string": "2.1.0", + "tarn": "^2.0.0", + "tildify": "2.0.0", + "uuid": "^3.3.3", + "v8flags": "^3.1.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "requires": { + "ms": "^2.1.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + } + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha1-ybpggfkIZwYH7nkGLXAN8GLFLtM=", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", + "requires": { + "mime-db": "1.40.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mysql2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", + "integrity": "sha1-L78xTaAWph0Dj/zVeioKo7e46sw=", + "requires": { + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.5.0", + "long": "^4.0.0", + "lru-cache": "^5.1.1", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha1-zrH7/1C2szSStc8hTM9eOc7z0Og=", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pg-connection-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.1.0.tgz", + "integrity": "sha1-4HJY8oBHZUCySBjrtdyinhAcpQI=" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "promise": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", + "requires": { + "asap": "~2.0.6" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ=", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + } + } + }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "tarn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-2.0.0.tgz", + "integrity": "sha1-xoSZ9piB+ZrpVbQxfKfSEtlC/e4=" + }, + "tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha1-8gXzZ01nfOaYtwZ6melJzgO0dUo=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=" + }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha1-/J3CNSHKIMVDP4HMTrmzAzuxBdg=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=" + } + } +} diff --git a/explorer/website/backend/package.json b/explorer/website/backend/package.json new file mode 100644 index 00000000..e1284148 --- /dev/null +++ b/explorer/website/backend/package.json @@ -0,0 +1,20 @@ +{ + "name": "website", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.19.0", + "config": "^3.2.2", + "express": "^4.17.1", + "express-handlebars": "^3.1.0", + "knex": "^0.19.4", + "mysql2": "^1.7.0" + } +} diff --git a/explorer/website/backend/src/application.js b/explorer/website/backend/src/application.js new file mode 100644 index 00000000..91f898a4 --- /dev/null +++ b/explorer/website/backend/src/application.js @@ -0,0 +1,102 @@ +const util = require('./util'); + +class Application { + constructor() { + this.expressClass = require('express'); + this.express = this.expressClass(); + this.config = require('config'); + + this.frontEndPath = __dirname + '/../../frontend'; + + this.controllerMap = {}; + + this.initialize(); + } + + getController(controllerClass) { + const name = controllerClass.name; + if(! this.controllerMap[name]) { + const controller = new controllerClass(); + this.controllerMap[name] = controller; + controller.initialize(this); + } + return this.controllerMap[name]; + } + + getControllerRoute(controllerClass, functionName) { + const controller = this.getController(controllerClass); + return controller[functionName].bind(controller); + } + + getDatabase() { + return this.database; + } + + getExpressClass() { + return this.expressClass; + } + + getExpress() { + return this.express; + } + + getFrontEndPath() { + return this.frontEndPath; + } + + getFrontEndViewsPath(path) { + if(! path) { + path = ''; + } + return this.frontEndPath + '/views' + path; + } + + initialize() { + this.doInitializeDatabase(); + this.doInitializeTemplateEngine(); + + require('./routes').initializeRoutes(this); + } + + doInitializeDatabase() { + const dbConfig = this.config.get('database'); + const knex = require('knex'); + this.database = knex({ + client: dbConfig.driver, + connection: { + host: dbConfig.host, + user: dbConfig.user, + password: dbConfig.password, + database: dbConfig.database, + } + }); + //this.database.on('query', console.log); + } + + doInitializeTemplateEngine() { + const hbs = require('express-handlebars'); + this.express.set('view engine', 'hbs'); + + const viewDirName = this.getFrontEndViewsPath(); + this.express.set('views', viewDirName); + this.express.engine('hbs', hbs({ + extname: 'hbs', + defaultView: 'home', + defaultLayout: 'default', + layoutsDir: viewDirName + '/layouts/', + partialsDir: viewDirName + '/partials/' + })); + + require('./templatehelpers').initializeTemplateHelpers(this); + } + + run() { + const serverConfig = this.config.get('server'); + const port = util.checkValue(serverConfig.port, 8080); + this.express.listen(port, () => { + console.log("Server is listening on port " + port); + }); + } +} + +module.exports = { Application: Application }; diff --git a/explorer/website/backend/src/controllers/blockcontroller.js b/explorer/website/backend/src/controllers/blockcontroller.js new file mode 100644 index 00000000..7ecb70ea --- /dev/null +++ b/explorer/website/backend/src/controllers/blockcontroller.js @@ -0,0 +1,51 @@ +const Controller = require('./controller').Controller; +const util = require('../util'); + +class BlockController extends Controller { + constructor() { + super(); + } + + viewBlockDetail(request, response) { + const urlQueries = request.query; + const hash = urlQueries.hash; + this.getDatabase().select().from('blocks').whereRaw('hex(hash) = ?', [ hash ]).then((blockList) => { + if(blockList.length === 0) { + this.send404(response); + } + else { + const block = util.bufferFieldsToHex(blockList[0]); + response.render('pages/blockdetail', { title: 'Block detail', block: block }); + } + }); + } + + getBlocks(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('blocks'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(blockList) { + response.json(util.bufferFieldsToHex(blockList)); + }); + } + + getBlock(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('blocks').whereRaw('hex(hash) = ?', [ hash ]).then((blockList) => { + if(blockList.length === 0) { + this.apiSend404(response); + } + else { + response.json(util.bufferFieldsToHex(blockList[0])); + } + }); + } + +} + +module.exports = { BlockController: BlockController }; diff --git a/explorer/website/backend/src/controllers/controller.js b/explorer/website/backend/src/controllers/controller.js new file mode 100644 index 00000000..72ad5d89 --- /dev/null +++ b/explorer/website/backend/src/controllers/controller.js @@ -0,0 +1,48 @@ +const util = require('../util'); + +class Controller { + constructor() { + } + + initialize(application) { + this.application = application; + + this.doInitialize(); + } + + getApplication() { + return this.application; + } + + getDatabase() { + return this.application.getDatabase(); + } + + apiSend404(response) { + response.status(404); + response.json({ + message: 'not found' + }); + } + + send404(response) { + response.status(404); + response.json({ + message: 'not found' + }); + } + + apiSendError(response, errorMessage, errorCode) { + errorMessage = util.checkValue(errorMessage, "Error"); + errorCode = util.checkValue(errorCode, 1); + response.json({ + message: errorMessage, + erroCode: errorCode + }); + } + + doInitialize() { + } +} + +module.exports = { Controller: Controller }; diff --git a/explorer/website/backend/src/controllers/transactioncontroller.js b/explorer/website/backend/src/controllers/transactioncontroller.js new file mode 100644 index 00000000..d76e55e8 --- /dev/null +++ b/explorer/website/backend/src/controllers/transactioncontroller.js @@ -0,0 +1,36 @@ +const Controller = require('./controller').Controller; + +class TransactionController extends Controller { + constructor() { + super(); + } + + getTransactions(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('transactions'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(transactionList) { + response.json(transactionList); + }); + } + + getTransaction(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('transactions').whereRaw('hex(recipient_hash) = ?', [ hash ]).then((transactionList) => { + if(transactionList.length === 0) { + this.apiSend404(response); + } + else { + response.json(transactionList[0]); + } + }); + } + +} + +module.exports = { TransactionController: TransactionController }; diff --git a/explorer/website/backend/src/controllers/validatorcontroller.js b/explorer/website/backend/src/controllers/validatorcontroller.js new file mode 100644 index 00000000..b2c0567f --- /dev/null +++ b/explorer/website/backend/src/controllers/validatorcontroller.js @@ -0,0 +1,37 @@ +const Controller = require('./controller').Controller; +const util = require('../util'); + +class ValidatorController extends Controller { + constructor() { + super(); + } + + getValidators(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('validators'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(validatorList) { + response.json(util.bufferFieldsToHex(validatorList)); + }); + } + + getValidator(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('validators').whereRaw('hex(validator_hash) = ?', [ hash ]).then((validatorList) => { + if(validatorList.length === 0) { + this.apiSend404(response); + } + else { + response.json(util.bufferFieldsToHex(validatorList[0])); + } + }); + } + +} + +module.exports = { ValidatorController: ValidatorController }; diff --git a/explorer/website/backend/src/routes.js b/explorer/website/backend/src/routes.js new file mode 100644 index 00000000..b80373f8 --- /dev/null +++ b/explorer/website/backend/src/routes.js @@ -0,0 +1,43 @@ +const bodyParser = require('body-parser'); + +const BlockController = require('./controllers/blockcontroller').BlockController; +const TransactionController = require('./controllers/transactioncontroller').TransactionController; +const ValidatorController = require('./controllers/validatorcontroller').ValidatorController; + +function initializeRoutes(application) { + const _c = function(controllerClass, functionName) { + return application.getControllerRoute(controllerClass, functionName); + }; + + const express = application.getExpress(); + + // parse requests of content-type - application/x-www-form-urlencoded + express.use(bodyParser.urlencoded({ extended: true })); + + // parse requests of content-type - application/json + express.use(bodyParser.json()); + + const publicFolder = __dirname + '/../../frontend/public/'; + express.use('/', application.getExpressClass().static(publicFolder)); + + express.get('/', (request, response) => { + response.render('pages/home', { title: 'Home page' }); + }); + + express.get('/validators', (request, response) => { + response.render('pages/validators', { title: 'Validator page' }); + }); + + express.get('/block', _c(BlockController, 'viewBlockDetail')); + + express.get('/api/blocks', _c(BlockController, 'getBlocks')); + express.get('/api/blocks/:hash', _c(BlockController, 'getBlock')); + + express.get('/api/transactions', _c(TransactionController, 'getTransactions')); + express.get('/api/transactions/:hash', _c(TransactionController, 'getTransaction')); + + express.get('/api/validators', _c(ValidatorController, 'getValidators')); + express.get('/api/validators/:hash', _c(ValidatorController, 'getValidator')); +} + +module.exports = { initializeRoutes: initializeRoutes }; diff --git a/explorer/website/backend/src/templatehelpers.js b/explorer/website/backend/src/templatehelpers.js new file mode 100644 index 00000000..e6f4acd0 --- /dev/null +++ b/explorer/website/backend/src/templatehelpers.js @@ -0,0 +1,33 @@ +const Handlebars = require('handlebars'); +const fs = require('fs'); + +function doRegisterPartial(fileName) +{ + let name = fileName; + name = name.substr(0, name.lastIndexOf('.')) || name; + name = name.substr(name.lastIndexOf('/')) || name; + Handlebars.registerPartial(name, fs.readFileSync(fileName, 'utf8')); +} + +function registerPartials(application) +{ + doRegisterPartial(application.getFrontEndViewsPath('/partials/test.hbs')); + doRegisterPartial(application.getFrontEndViewsPath('/partials/blocktable.hbs')); + doRegisterPartial(application.getFrontEndViewsPath('/partials/blockdetail.hbs')); +} + +function registerHelpers(application) +{ + Handlebars.registerHelper("url", function(url) { + return url; + }); +} + +function initializeTemplateHelpers(application) +{ + registerHelpers(application) + + registerPartials(application); +} + +module.exports = { initializeTemplateHelpers: initializeTemplateHelpers }; diff --git a/explorer/website/backend/src/util.js b/explorer/website/backend/src/util.js new file mode 100644 index 00000000..1c74def8 --- /dev/null +++ b/explorer/website/backend/src/util.js @@ -0,0 +1,51 @@ +const util = {}; + +util.hexToString = function(hex) +{ + let str = ''; + for(let i = 0; i < hex.length; i += 2) { + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + } + return str; +} + +util.stringToHex = function(str) +{ + let hex = ''; + for (let i = 0; i < str.length; ++i) { + hex += Number(str.charCodeAt(i)).toString(16); + } + return hex; +} + +util.checkValue = function(value, defaultValue) +{ + if(value === undefined) { + if(defaultValue === undefined) { + defaultValue = null; + } + return defaultValue; + } + + return value; +} + +util.bufferFieldsToHex = function(dict) +{ + if(Array.isArray(dict)) { + for(var i = 0; i < dict.length; ++i) { + dict[i] = util.bufferFieldsToHex(dict[i]); + } + } + else { + for(var key in dict) { + if(dict[key] && dict[key].constructor == Buffer) { + dict[key] = dict[key].toString('hex'); + } + } + } + + return dict; +} + +module.exports = util; diff --git a/explorer/website/config/default.json b/explorer/website/config/default.json new file mode 100644 index 00000000..d76eb7bc --- /dev/null +++ b/explorer/website/config/default.json @@ -0,0 +1,16 @@ +{ + "database" : { + "driver" : "mysql2", + "host" : "localhost", + "port" : 3306, + "user" : "root", + "password" : "", + "database" : "synapse" + }, + + "server" : { + "comment" : "the port the web server listens on", + "port" : 3000 + } +} + diff --git a/explorer/website/frontend/.gitignore b/explorer/website/frontend/.gitignore new file mode 100644 index 00000000..a48cf0de --- /dev/null +++ b/explorer/website/frontend/.gitignore @@ -0,0 +1 @@ +public diff --git a/explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc.png b/explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ba61a8055fcb18273f2468d335572204667b1f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q zWR@in#&u+WgT?Hi<}D3B3}GOXuX|8Oj3tosHiJ3*4TN zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*} HQ$iB}HK{Sd literal 0 HcmV?d00001 diff --git a/explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc_disabled.png b/explorer/website/frontend/images/vendor/datatables.net-dt/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do zDX;f`c1`y6n0RgO@$!H7chZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL literal 0 HcmV?d00001 diff --git a/explorer/website/frontend/images/vendor/datatables.net-dt/sort_both.png b/explorer/website/frontend/images/vendor/datatables.net-dt/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..af5bc7c5a10b9d6d57cb641aeec752428a07f0ca GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08Bycxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1 z#7^XbGKZ7LW3XeONb$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb Aj{pDw literal 0 HcmV?d00001 diff --git a/explorer/website/frontend/images/vendor/datatables.net-dt/sort_desc.png b/explorer/website/frontend/images/vendor/datatables.net-dt/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@yo z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM= z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0 Hl+XkKC^j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@ u>N?4t-1qslpJw9!O?PJ&w0Cby= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concatenate": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", + "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", + "dev": true, + "requires": { + "globs": "^0.1.2" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "dev": true, + "requires": { + "browserslist": "^4.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.5.3" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "datatables.net": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", + "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-dt": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.19.tgz", + "integrity": "sha512-joFHYjLYvr9VnC9Fx3e+8jtXnQ/fP/mPFWt9p0NhZ3Zm5N0jlYyWhJQbnLkihOLuDcDFMaGdBQSvmIdTVdgGyw==", + "requires": { + "datatables.net": "1.10.19", + "jquery": ">=1.7" + } + }, + "datatables.net-zf": { + "version": "1.10.20", + "resolved": "https://registry.npmjs.org/datatables.net-zf/-/datatables.net-zf-1.10.20.tgz", + "integrity": "sha512-UYi5LqdjkwGxuljGMhJpxuZMrUKZ6BWDeXaEZe+Y53B+s5bf9+z1KZaqqv+jP6ClAQ8LF0ftc5yDAA1l0Qc/FA==", + "requires": { + "datatables.net": "1.10.20", + "jquery": ">=1.7" + }, + "dependencies": { + "datatables.net": { + "version": "1.10.20", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.20.tgz", + "integrity": "sha512-4E4S7tTU607N3h0fZPkGmAtr9mwy462u+VJ6gxYZ8MxcRIjZqHy3Dv1GNry7i3zQCktTdWbULVKBbkAJkuHEnQ==", + "requires": { + "jquery": ">=1.7" + } + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serializer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "dev": true + }, + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.267.tgz", + "integrity": "sha512-9Q2ixAJC+oHjWNtJV0MQ4vJMCWSowIrC6V6vcr+bwPddTDHj2ddv9xxXCzf4jT/fy6HP7maPoW0gifXkRxCttQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz", + "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.0" + } + }, + "es-abstract": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", + "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.0.0", + "string.prototype.trimright": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", + "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "file-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", + "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", + "dev": true, + "requires": { + "glob": "^7.1.1" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "dev": true, + "requires": { + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "dev": true, + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + } + } + }, + "img-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", + "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "laravel-mix": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.0.tgz", + "integrity": "sha512-QpsVoM6zGa83E5AUMwOmi4wKdYfJMaW1jIpJ1CCL74abOHj1ne25njBQ4detO41GAjIkZIkrmwECEcOebC8+3Q==", + "dev": true, + "requires": { + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "@babel/runtime": "^7.2.0", + "autoprefixer": "^9.4.2", + "babel-loader": "^8.0.4", + "babel-merge": "^2.0.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.3", + "collect.js": "^4.12.8", + "concatenate": "0.0.2", + "css-loader": "^1.0.1", + "dotenv": "^6.2.0", + "dotenv-expand": "^4.2.0", + "extract-text-webpack-plugin": "v4.0.0-beta.0", + "file-loader": "^2.0.0", + "friendly-errors-webpack-plugin": "^1.6.1", + "fs-extra": "^7.0.1", + "glob": "^7.1.2", + "html-loader": "^0.5.5", + "imagemin": "^6.0.0", + "img-loader": "^3.0.0", + "lodash": "^4.17.15", + "md5": "^2.2.1", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "postcss-loader": "^3.0.0", + "style-loader": "^0.23.1", + "terser": "^3.11.0", + "terser-webpack-plugin": "^1.2.2", + "vue-loader": "^15.4.2", + "webpack": "^4.36.1", + "webpack-cli": "^3.1.2", + "webpack-dev-server": "^3.1.14", + "webpack-merge": "^4.1.0", + "webpack-notifier": "^1.5.1", + "yargs": "^12.0.5" + } + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", + "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz", + "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dev": true, + "requires": { + "is-extendable": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "portfinder": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", + "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + } + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "dev": true + }, + "prettier": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", + "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.0.0", + "compose-function": "3.0.3", + "convert-source-map": "1.6.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.12.tgz", + "integrity": "sha512-u5Rxn+dKTPCW5/11kMNxtmqKsxCjcpnqj9CaJoru1NqeJ0DOa9rOM00e0HqmseTAatGkKoLY+jaNecMYevu1gg==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz", + "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", + "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", + "dev": true, + "requires": { + "node-forge": "0.8.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "style-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.33", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.4.tgz", + "integrity": "sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.1.tgz", + "integrity": "sha512-fwIKtA23Pl/rqfYP5TSGK7gkEuLhoTvRYW+TU7ER3q9GpNLt/PjG5NLv3XHRDiTg7OPM1JcckBgds+VnAc+HbA==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.0.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz", + "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz", + "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-cli": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.9.tgz", + "integrity": "sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz", + "integrity": "sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.2", + "killable": "^1.0.1", + "loglevel": "^1.6.4", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.24", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.6", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.1", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-notifier": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", + "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "dev": true, + "requires": { + "node-notifier": "^5.1.2", + "object-assign": "^4.1.0", + "strip-ansi": "^3.0.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.0.tgz", + "integrity": "sha512-6gpP93MR+VOOehKbCPchro3wFZNSNmek8A2kbkOAZLIZAYx1KP/zAqwO0sOHi3xJEb+UBz8NaYt/17UNit1Q9w==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/explorer/website/frontend/package.json b/explorer/website/frontend/package.json new file mode 100644 index 00000000..093d71f7 --- /dev/null +++ b/explorer/website/frontend/package.json @@ -0,0 +1,32 @@ +{ + "name": "frontend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "npm run development", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "npm run development -- --watch", + "watch-poll": "npm run watch -- --watch-poll", + "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", + "prod": "npm run production", + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "cross-env": "^5.2.0", + "laravel-mix": "^5.0.0", + "resolve-url-loader": "^3.1.0", + "sass": "^1.22.12", + "sass-loader": "^8.0.0", + "vue-template-compiler": "^2.6.10" + }, + "dependencies": { + "datatables.net": "^1.10.19", + "datatables.net-dt": "^1.10.19", + "datatables.net-zf": "^1.10.20", + "sprintf-js": "^1.1.2" + } +} diff --git a/explorer/website/frontend/sass/app.scss b/explorer/website/frontend/sass/app.scss new file mode 100644 index 00000000..3f2cae90 --- /dev/null +++ b/explorer/website/frontend/sass/app.scss @@ -0,0 +1 @@ +@import '../node_modules/datatables.net-dt/css/jquery.dataTables.css'; diff --git a/explorer/website/frontend/views/layouts/default.hbs b/explorer/website/frontend/views/layouts/default.hbs new file mode 100644 index 00000000..ae36f203 --- /dev/null +++ b/explorer/website/frontend/views/layouts/default.hbs @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {{ title }} + + + +{{{body}}} + + + diff --git a/explorer/website/frontend/views/pages/blockdetail.hbs b/explorer/website/frontend/views/pages/blockdetail.hbs new file mode 100644 index 00000000..0bd985b1 --- /dev/null +++ b/explorer/website/frontend/views/pages/blockdetail.hbs @@ -0,0 +1 @@ +{{> blockdetail id="1" }} diff --git a/explorer/website/frontend/views/pages/home.hbs b/explorer/website/frontend/views/pages/home.hbs new file mode 100644 index 00000000..23a6f451 --- /dev/null +++ b/explorer/website/frontend/views/pages/home.hbs @@ -0,0 +1,7 @@ + +




+ +{{> blocktable }} + diff --git a/explorer/website/frontend/views/pages/validators.hbs b/explorer/website/frontend/views/pages/validators.hbs new file mode 100644 index 00000000..398ad058 --- /dev/null +++ b/explorer/website/frontend/views/pages/validators.hbs @@ -0,0 +1,2 @@ +{{> validatortable }} + diff --git a/explorer/website/frontend/views/partials/blockdetail.hbs b/explorer/website/frontend/views/partials/blockdetail.hbs new file mode 100644 index 00000000..ec130cce --- /dev/null +++ b/explorer/website/frontend/views/partials/blockdetail.hbs @@ -0,0 +1,9 @@ +Hash: {{ block.hash }}
+Signature: {{ block.signature }}
+Height: {{ block.height }}
+Slot: {{ block.slot }}
+Created At: {{ block.created_at }}
+Proposer: {{ block.proposer }}
+Parent hash: {{ block.parent_block_hash }}
+State root: {{ block.state_root }}
+Randao reveal: {{ block.randao_reveal }}
\ No newline at end of file diff --git a/explorer/website/frontend/views/partials/blocktable.hbs b/explorer/website/frontend/views/partials/blocktable.hbs new file mode 100644 index 00000000..02cd7a6e --- /dev/null +++ b/explorer/website/frontend/views/partials/blocktable.hbs @@ -0,0 +1,70 @@ +
+ + + + + + + + + + + +
IDHeightSlotHashParent
+ +
+ + diff --git a/explorer/website/frontend/views/partials/test.hbs b/explorer/website/frontend/views/partials/test.hbs new file mode 100644 index 00000000..fdbca1ba --- /dev/null +++ b/explorer/website/frontend/views/partials/test.hbs @@ -0,0 +1 @@ +This is a test partial. diff --git a/explorer/website/frontend/views/partials/validatortable.hbs b/explorer/website/frontend/views/partials/validatortable.hbs new file mode 100644 index 00000000..fafb8423 --- /dev/null +++ b/explorer/website/frontend/views/partials/validatortable.hbs @@ -0,0 +1,66 @@ +
+ + + + + + + + + +
IDPublic keyValidator IDValidator hash
+
+ + diff --git a/explorer/website/frontend/webpack.mix.js b/explorer/website/frontend/webpack.mix.js new file mode 100644 index 00000000..4f0398e9 --- /dev/null +++ b/explorer/website/frontend/webpack.mix.js @@ -0,0 +1,11 @@ +let mix = require('laravel-mix'); + +const publicFolder = 'public/'; + +mix.copy('images', publicFolder + '/images'); + +mix + .js('js/app.js', publicFolder + 'js/') + .sass('sass/app.scss', publicFolder + 'css/') +; + diff --git a/explorer/website/index.js b/explorer/website/index.js new file mode 100644 index 00000000..f35be68e --- /dev/null +++ b/explorer/website/index.js @@ -0,0 +1,4 @@ +const Application = require('./src/application').Application; + +var app = new Application() +app.run() diff --git a/explorer/website/package-lock.json b/explorer/website/package-lock.json new file mode 100644 index 00000000..460fdbe4 --- /dev/null +++ b/explorer/website/package-lock.json @@ -0,0 +1,1791 @@ +{ + "name": "website", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha1-qNCv1zJR7/u9X+OEp31zADwXpx8=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha1-H5Q+WjV/rBC04PWq7zsUzcGvbsc=" + }, + "commander": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", + "integrity": "sha1-RZWuw1MFJeZx+2+F+xc9+P+L9Xo=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "config": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/config/-/config-3.2.2.tgz", + "integrity": "sha1-x9MbsqnTABOpBf9CAQHjsbpY7q0=", + "requires": { + "json5": "^1.0.1" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha1-Z0T/dkHBSMP4ppwwflEjXB9KN88=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha1-F7EI+e5RLft6XH88iyfqnhqcCNE=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha1-8GlhdpDBDIaOc7hGV0Z2T5fDR58=", + "requires": { + "is-property": "^1.0.2" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getopts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", + "integrity": "sha1-Z6D+RxysucaH2BfKtkULlt3oMTs=" + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha1-Wc3eCiopfMKusMZEWhle6J8SdVA=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "requires": { + "minimist": "^1.2.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + }, + "knex": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.19.4.tgz", + "integrity": "sha1-z2L4gkOSOHFSoKGIplhdXepoMrs=", + "requires": { + "bluebird": "^3.5.5", + "colorette": "1.1.0", + "commander": "^3.0.1", + "debug": "4.1.1", + "getopts": "2.2.5", + "inherits": "~2.0.4", + "interpret": "^1.2.0", + "liftoff": "3.1.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "pg-connection-string": "2.1.0", + "tarn": "^2.0.0", + "tildify": "2.0.0", + "uuid": "^3.3.3", + "v8flags": "^3.1.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "requires": { + "ms": "^2.1.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + } + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha1-ybpggfkIZwYH7nkGLXAN8GLFLtM=", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", + "requires": { + "mime-db": "1.40.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mysql2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", + "integrity": "sha1-L78xTaAWph0Dj/zVeioKo7e46sw=", + "requires": { + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.5.0", + "long": "^4.0.0", + "lru-cache": "^5.1.1", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha1-zrH7/1C2szSStc8hTM9eOc7z0Og=", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pg-connection-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.1.0.tgz", + "integrity": "sha1-4HJY8oBHZUCySBjrtdyinhAcpQI=" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ=", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + } + } + }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "tarn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-2.0.0.tgz", + "integrity": "sha1-xoSZ9piB+ZrpVbQxfKfSEtlC/e4=" + }, + "tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha1-8gXzZ01nfOaYtwZ6melJzgO0dUo=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=" + }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha1-/J3CNSHKIMVDP4HMTrmzAzuxBdg=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=" + } + } +} diff --git a/explorer/website/package.json b/explorer/website/package.json new file mode 100644 index 00000000..8e2fa5df --- /dev/null +++ b/explorer/website/package.json @@ -0,0 +1,19 @@ +{ + "name": "website", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.19.0", + "config": "^3.2.2", + "express": "^4.17.1", + "knex": "^0.19.4", + "mysql2": "^1.7.0" + } +} diff --git a/explorer/website/src/application.js b/explorer/website/src/application.js new file mode 100644 index 00000000..c7dde2d2 --- /dev/null +++ b/explorer/website/src/application.js @@ -0,0 +1,66 @@ +const util = require('./util'); + +class Application { + constructor() { + this.express = require('express')(); + this.config = require('config'); + + this.controllerMap = {}; + + this.initialize(); + } + + getController(controllerClass) { + const name = controllerClass.name; + if(! this.controllerMap[name]) { + const controller = new controllerClass(); + this.controllerMap[name] = controller; + controller.initialize(this); + } + return this.controllerMap[name]; + } + + getControllerRoute(controllerClass, functionName) { + const controller = this.getController(controllerClass); + return controller[functionName].bind(controller); + } + + getDatabase() { + return this.database; + } + + getExpress() { + return this.express; + } + + initialize() { + this.doInitializeDatabase(); + + require('./routes').initializeRoutes(this); + } + + doInitializeDatabase() { + const dbConfig = this.config.get('database'); + const knex = require('knex'); + this.database = knex({ + client: dbConfig.driver, + connection: { + host: dbConfig.host, + user: dbConfig.user, + password: dbConfig.password, + database: dbConfig.database, + } + }); + //this.database.on('query', console.log); + } + + run() { + const serverConfig = this.config.get('server'); + const port = util.checkValue(serverConfig.port, 8080); + this.express.listen(port, () => { + console.log("Server is listening on port " + port); + }); + } +} + +module.exports = { Application: Application }; diff --git a/explorer/website/src/controllers/blockcontroller.js b/explorer/website/src/controllers/blockcontroller.js new file mode 100644 index 00000000..2181ea4d --- /dev/null +++ b/explorer/website/src/controllers/blockcontroller.js @@ -0,0 +1,36 @@ +const Controller = require('./controller').Controller; + +class BlockController extends Controller { + constructor() { + super(); + } + + getBlocks(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('blocks'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(blockList) { + response.json(blockList); + }); + } + + getBlock(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('blocks').whereRaw('hex(hash) = ?', [ hash ]).then((blockList) => { + if(blockList.length === 0) { + this.apiSend404(response); + } + else { + response.json(blockList[0]); + } + }); + } + +} + +module.exports = { BlockController: BlockController }; diff --git a/explorer/website/src/controllers/controller.js b/explorer/website/src/controllers/controller.js new file mode 100644 index 00000000..dc6dd455 --- /dev/null +++ b/explorer/website/src/controllers/controller.js @@ -0,0 +1,41 @@ +const util = require('../util'); + +class Controller { + constructor() { + } + + initialize(application) { + this.application = application; + + this.doInitialize(); + } + + getApplication() { + return this.application; + } + + getDatabase() { + return this.application.getDatabase(); + } + + apiSend404(response) { + response.status(404); + response.json({ + message: 'not found' + }); + } + + apiSendError(response, errorMessage, errorCode) { + errorMessage = util.checkValue(errorMessage, "Error"); + errorCode = util.checkValue(errorCode, 1); + response.json({ + message: errorMessage, + erroCode: errorCode + }); + } + + doInitialize() { + } +} + +module.exports = { Controller: Controller }; diff --git a/explorer/website/src/controllers/transactioncontroller.js b/explorer/website/src/controllers/transactioncontroller.js new file mode 100644 index 00000000..d76e55e8 --- /dev/null +++ b/explorer/website/src/controllers/transactioncontroller.js @@ -0,0 +1,36 @@ +const Controller = require('./controller').Controller; + +class TransactionController extends Controller { + constructor() { + super(); + } + + getTransactions(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('transactions'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(transactionList) { + response.json(transactionList); + }); + } + + getTransaction(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('transactions').whereRaw('hex(recipient_hash) = ?', [ hash ]).then((transactionList) => { + if(transactionList.length === 0) { + this.apiSend404(response); + } + else { + response.json(transactionList[0]); + } + }); + } + +} + +module.exports = { TransactionController: TransactionController }; diff --git a/explorer/website/src/controllers/validatorcontroller.js b/explorer/website/src/controllers/validatorcontroller.js new file mode 100644 index 00000000..9843ad53 --- /dev/null +++ b/explorer/website/src/controllers/validatorcontroller.js @@ -0,0 +1,36 @@ +const Controller = require('./controller').Controller; + +class ValidatorController extends Controller { + constructor() { + super(); + } + + getValidators(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('validators'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(validatorList) { + response.json(validatorList); + }); + } + + getValidator(request, response) { + let hash = request.params.hash; + this.getDatabase().select().from('validators').whereRaw('hex(validator_hash) = ?', [ hash ]).then((validatorList) => { + if(validatorList.length === 0) { + this.apiSend404(response); + } + else { + response.json(validatorList[0]); + } + }); + } + +} + +module.exports = { ValidatorController: ValidatorController }; diff --git a/explorer/website/src/routes.js b/explorer/website/src/routes.js new file mode 100644 index 00000000..b4202e4c --- /dev/null +++ b/explorer/website/src/routes.js @@ -0,0 +1,35 @@ +const bodyParser = require('body-parser'); + +const BlockController = require('./controllers/blockcontroller').BlockController; +const TransactionController = require('./controllers/transactioncontroller').TransactionController; +const ValidatorController = require('./controllers/validatorcontroller').ValidatorController; + +function initializeRoutes(application) { + const _c = function(controllerClass, functionName) { + return application.getControllerRoute(controllerClass, functionName); + }; + + const express = application.getExpress(); + + // parse requests of content-type - application/x-www-form-urlencoded + express.use(bodyParser.urlencoded({ extended: true })); + + // parse requests of content-type - application/json + express.use(bodyParser.json()); + + //express.use('/', express.static('public')); + + express.get('/', (request, response) => { + response.json({"message": "Hello"}); + }); + express.get('/api/blocks', _c(BlockController, 'getBlocks')); + express.get('/api/blocks/:hash', _c(BlockController, 'getBlock')); + + express.get('/api/transactions', _c(TransactionController, 'getTransactions')); + express.get('/api/transactions/:hash', _c(TransactionController, 'getTransaction')); + + express.get('/api/validators', _c(ValidatorController, 'getValidators')); + express.get('/api/validators/:hash', _c(ValidatorController, 'getValidator')); +} + +module.exports = { initializeRoutes: initializeRoutes }; diff --git a/explorer/website/src/util.js b/explorer/website/src/util.js new file mode 100644 index 00000000..58f1bd1c --- /dev/null +++ b/explorer/website/src/util.js @@ -0,0 +1,33 @@ +const util = {}; + +util.hexToString = function(hex) +{ + let str = ''; + for(let i = 0; i < hex.length; i += 2) { + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + } + return str; +} + +util.stringToHex = function(str) +{ + let hex = ''; + for (let i = 0; i < str.length; ++i) { + hex += Number(str.charCodeAt(i)).toString(16); + } + return hex; +} + +util.checkValue = function(value, defaultValue) +{ + if(value === undefined) { + if(defaultValue === undefined) { + defaultValue = null; + } + return defaultValue; + } + + return value; +} + +module.exports = util; diff --git a/go.mod b/go.mod index 3392aaf1..d70edfc9 100644 --- a/go.mod +++ b/go.mod @@ -26,10 +26,15 @@ require ( github.com/libp2p/go-libp2p-core v0.2.2 github.com/libp2p/go-libp2p-crypto v0.1.0 github.com/libp2p/go-libp2p-discovery v0.1.0 + github.com/libp2p/go-libp2p-host v0.0.3 // indirect + github.com/libp2p/go-libp2p-interface-connmgr v0.0.5 // indirect github.com/libp2p/go-libp2p-kad-dht v0.2.1 + github.com/libp2p/go-libp2p-net v0.0.2 // indirect github.com/libp2p/go-libp2p-peer v0.2.0 github.com/libp2p/go-libp2p-peerstore v0.1.3 github.com/libp2p/go-libp2p-pubsub v0.1.1 + github.com/libp2p/go-stream-muxer v0.1.0 // indirect + github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-multiaddr v0.0.4 github.com/multiformats/go-multiaddr-net v0.0.1 diff --git a/go.sum b/go.sum index aa8eda5c..406c3f14 100644 --- a/go.sum +++ b/go.sum @@ -117,6 +117,7 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho= @@ -339,6 +340,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b h1:wxtKgYHEncAU00muMD06dzLiahtGM1eouRNOzVV7tdQ= github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= @@ -351,6 +353,7 @@ github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8 github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libp2p/go-addr-util v0.0.1 h1:TpTQm9cXVRVSKsYbgQ7GKc3KbbHVTnbostgGaDEP+88= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= @@ -566,6 +569,8 @@ github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859 h1:smQbSzmT3EHl4EUwtFwFGmGIpiYgIiiPeVv1uguIQEE= +github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= diff --git a/testnet.json b/testnet.json new file mode 100644 index 00000000..a720b810 --- /dev/null +++ b/testnet.json @@ -0,0 +1,2058 @@ +{ + "GenesisTime": 1568429537, + "BootstrapPeers": [], + "NetworkID": "testnet", + "InitialValidators": { + "NumValidators": 256, + "Validators": [ + { + "PubKey": "a7b6ad3e09a5cfe60ad2977f4d3eb9603aac6fe6b05bd0a4c0776ff3e6ca359e5ae07720c40f4ec3b4dbecccc85300240414ac988986d74aa7c30efd30091b1fc6d8f993086bbcac7d817c2c929dc7c992f346993d13147de601de7c8c5669da", + "ProofOfPossession": "8410c81d7ea1efff99b53a6e72d336e599febdfad7f01f726c2fe39e722daa2fd71d5001b2215b1959054f8d52723986", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 0 + }, + { + "PubKey": "a19d4d7d491805d7245ff209602f4b140e9839145bdbca4efbfd26b16cc71d86cfd66c1f12b05c7ead070e2d8854009919092aa6acc8f3abae0cc345b95dd553b31781fa90e7f338f0ea225663c40842c10c924e35a236ed2b4c44622e4e3661", + "ProofOfPossession": "ac80ead7f7f7c9686db41f964ce3825242fcff3d69af72309ec942816cd073ebfd7a805fdddcbef8214437ed8beada35", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 1 + }, + { + "PubKey": "97138479ee7e3d44261a40582e8b6d6592d6367b1e3f81316fc75c928e327bbccd3aa7053282a90d99482381569ebf880b6f3654eddf040f2d7f7da39fa6a18228b2cba25f35b8d3b33c01e27f3eb8e5cbbfe10d5ad8d732a5978a041c06f463", + "ProofOfPossession": "a596c216cf0667901b738d3478420824edc188e7a0848bffb41061a77984095746b8b53e3d01e0a8f08bf67a871f9cd8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 2 + }, + { + "PubKey": "8e9d262b84737956cdeea295fd63c7399861db2a8f2c88c25c4c2c34349477503123ebd74972877174800486f719b47b0f2250dc67bc0729661f6fdfcd987db342f39cefd9773a6d61812d8766de4ae149b9fad121e9d9c3aab2e561b606c2c1", + "ProofOfPossession": "962a047dc6a4b92e0c6d2be849ce2361b4dc3a2b767df729e88d0c50cbbf9e833146774710e0b1729cf0183a300bda80", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 3 + }, + { + "PubKey": "ad351d25cc116c7ab6090fe361aea56aaed059d73520b9f2dcc3e375a0f9e7a06c07819846c12fe83e596ab3d1eb248b11d994ed3976a8066491c5c5b63315fc5fee1ace83bec530dd8680d6eedb615cbd98905888eb8d87bb76f8fdc04ea0fe", + "ProofOfPossession": "b55227328bcce6f841c50a2940a441eab8a88fe67073b6c8a5db80382e38bbcd05694284b0178cfc30765e33e41af564", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 4 + }, + { + "PubKey": "88ce4de264f804ff5192580f7370711cf47602ce22ef305ac3b61b90c331e8a85000e38eed8dc0ff887ce3c813a1fac4126aa346970412fa27dae778bfcb619aff35974a63820e974d1c4d47437f7694c68e62b9cf1a87a26fe57bccaa6f29a6", + "ProofOfPossession": "ac4448d7472983e95388324546b8e63d101eb34525d071c5c0378d7c9fb0a42fcbaf2ca49adb2bac961279757f5ef905", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 5 + }, + { + "PubKey": "b970b4cf4397e34fa6d7c155863d660d34b08837234cfdd7fe74024a60e2ae0932e9e9879e5d0915ff20b5d5dd7d3221179996cd90fbc2298a3207a199ed1f395f42c5d63e8b9eb17e205f0a1f9ed49d67fd309277b142ba82073afd310417f4", + "ProofOfPossession": "a5f5318aba5b54fffaa2695e6b165b3914d4ed9af719906a975f14015a8f19ae6e15ec7dfcb20b4d4dbf63d385d4ad09", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 6 + }, + { + "PubKey": "a2b68910c7789d14486406e88fc245a15f7a14fedeafb671084b5d16b85778b733303f9fb1ce8fe739a8f7c30c21ae300aa0cd6ab3d2bb1c8c7569f3743a194df736a064ee35a5e32c88b5052579146a759b82e21a5f520d28e138b252cef7ba", + "ProofOfPossession": "ad7518d329b6b75b548ebd59fe9dcb6b3b34f5501ac415998c41ccd64957122c1477844d69b4daabdfd5574cbfb6f16f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 7 + }, + { + "PubKey": "a7da3628c9abfc51ab8c04282ce4287268f92c480f774e77074acc2cc78ed2e34ccf22aa7828789c1f6a7b83f0653c51081b2cc8a02e17089c5bf76391c80af2228d01b3530de84f942405a77e73a36a1ce7c3ab471bea0b3bbffe4302f780b3", + "ProofOfPossession": "a5f83c7dee1f8656588d78c77d047b4581aa61a32843d491e3bba44ccc15b729394e19e29d3057d24cfbdd8b42b0e531", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 8 + }, + { + "PubKey": "82e226fd4841c2d9314a93ecb0531e670365c62c1cd14861f2454a529e430e347effe97537343cd4fc20cc82bcd6620719c7e8e60c829bfbf507f2f4e39dcf7d4c0ab4faea167404e8c3837a6c820653928216f0a08e5daf7269ca9242aba4fe", + "ProofOfPossession": "b53b848e3122833a1c66862be97ee352809950f724786a74286a919ca7e35121c03dad14184a75359a5ea1b281042c9e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 9 + }, + { + "PubKey": "a40aab69baa7e61674bb9a48aeeaf2dace7cfd63a7593cb2bc716a4c811543b220cd3374ada6924baa0d480f02563c490b764693e470104731f9659c241fdc6eed10ee8b0d685693b61940bc7885736e6ae00e6130ecee2135fb2a86b9b66d03", + "ProofOfPossession": "a1534d2e8c52ec0154608e05fda6e4e14ae8be1999850a0718c1723b6066ba3b15e29f1032f62f333a42b3237cdf4bf6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 10 + }, + { + "PubKey": "83cd2908749d84ba48ff5ac7f23036de35a33d8e591b93e8ace6fc03906dc18fd2d141a19f40e65fe2b7a472541e3aae092d1ee7e342b48c40c7ab5f576d4a33b0540b6dbe252d3445c2bb09d323b4d4c6b4cd59184ecc22890d3ac24f2f647e", + "ProofOfPossession": "93f6d70dfdb55e461a9881ad5fa4d2db72ec37416320ccba1c059d93f7cc34f0aba88b4bd77407554a17453d306f187e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 11 + }, + { + "PubKey": "a59af11554cd236effd030f154f572130e1e978c719ab403e129425961376f906820f3d1222b759ae9016032be4fccea0c6f9c45d7a4901bf1986a9a2b0e309ed00c747e38b256b7acf8568309befb9d03ff9f3832a299ab1a733f9f9ab70cd3", + "ProofOfPossession": "a5bfbf2417a5c6495fd5d5e9f7b45fd18898feaf6301c61bd51f63028eec242b705fc10f9b17ee1cb9e00ce2bf821286", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 12 + }, + { + "PubKey": "97ab6939e0327a3e20fd32c7c33e7d2aa1b5fb979f01e40674b986492baccc092dda05ac1656c86751925811a348b11e18e1136ad0877e0b068a58ff6674f55cf5e70e659a0fa6c5e989091db452dd6e0d4c8174e3be94d8af603469b2541e36", + "ProofOfPossession": "84d45d4bc1ce1fc2452bc664707369eab23cbb1399a7c01396f612404bc2eddf88a89039784d3d59cd3ac8f6c20e2fcb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 13 + }, + { + "PubKey": "96e83c38503518865260de5b66c7546837ff48dd336b7cec73d454a0e0eff022229e36ca553fddfa4448f74307f4a2501138be9107df3a562bd3287d01bb51c56a7ca6d2a70eda01fa84ffe243fed87e5926c062d4bc85e748b76baa3db80558", + "ProofOfPossession": "8de6b56526ac0b1e8ec8663b8b81d6ed621e22494681f0250a18fda2574853c1665900abbde8f58b23cfd300d4bc12a3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 14 + }, + { + "PubKey": "934c923731b2605a174a170a8db3ce33e8e111d89b281124f08d2daae230d6f2681e6db2b43185a0352c9383806121b108f6a76d2ab4c0411f2384c0f688769e4c4ecbbeb67abd9c19b98e4f1e9b998368d630f1be611c8574166ad9d6af5082", + "ProofOfPossession": "8769bb4c4de04f6902bb3429b2efff0ff064cc508d64ced25b0751b01833d7962ddf0dfebdb8eba718017b2557750c5f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 15 + }, + { + "PubKey": "945fdb06457eccd7c1d4e7164e4492fbed6f30df9f31646450287dce992066376fd6d4414c7327bcf4f65d997afc73141878058bb2a1ede75e2df9eb824456a948d6702aea2c514f275ad06c19ded7e1d916f02c0153a73a9631ae1cf75933c9", + "ProofOfPossession": "957c5f2e14373266d062b76d9efcb282f5af4a2d205f462a1db284e071b2b1aad429a178ffd0791ac1813bd3ec35f2c0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 16 + }, + { + "PubKey": "a54551b172858f81f5571149c76bfd19e4fc633df03a24098baa15fc881a2034a5990057330b9fa42955413be79964e615976a843c46ed2a29f2d3810656dcba7fab4e2b74dd62644802ebaaf651f14207d4265fb28cf1ad74d3a8d504b7c89e", + "ProofOfPossession": "88b0e2b9072e71d1ebf68bdb1f247b6109935704944c6529eba77c041856fa87152f27704672e39fc24e676cd51eb9d4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 17 + }, + { + "PubKey": "961b589302316d443846f57a6718f7ab6151bd81781cdfa8d7dbdc17875f45a3488ae99dd671e8c0495f94a4b2c967df114e0fd1e36a98ae34abbcc0e4f8db8f92895015f7e679bb90cbd95ad2e573074af9e92821da03d809ebecee171ff6c5", + "ProofOfPossession": "a607f0cc76d54a16f4436c7dd7ab5a13f17c2be94d6013e25471c6f64493bd3048dc2036b1485e82da8b009c2e275668", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 18 + }, + { + "PubKey": "a98396f8b46e5ddcb11a1c111cdc8090cb43110556d64190cb188bbc06a1123aa84838ebdb79f9583ba683b1aff752e404c32535f32c9102ac0e9681d51a17e7aa1fcd06f0e70d9c9b56cb8f37fe387800d0fce352974467b4b3429d4845cd0f", + "ProofOfPossession": "a1efab9edc5becf74d204057cb7be8dcf867ff2518e4ea09acb4307d9441607dc1776e8c2ad04126532312659fa5985b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 19 + }, + { + "PubKey": "90c0c41475b694a4839e4ae88f6eebb434dd36214d536a1b44b9f98e3d87b38291fe6c515fde053309be22a83235dbf4041672c8673d53fbe2027da2672021f29038377de6a3aaa95a58d53f9d9a513d3242e23ce361c3af6353e9a1e7a79498", + "ProofOfPossession": "a2fb9ece3e7b0471a0134f277b339a8a4ddd4ed010173c3ef14bec34c2f9b6f9c3dc4357d71722d1554733165e00de2d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 20 + }, + { + "PubKey": "96b991ce2afdc13952928eeebcd28db2207e413bbc0291392e15d9d9b7a03f2c419ed212f05dbf26f092e86938f295950fd741cfddfb7fffb7aff9e4cf94c75783b9dd7e12693bff581ff91e858c32405ee28d8eb11a2dad36a812f47e20d23d", + "ProofOfPossession": "b8136ae3ce9ddf34f47b110c98d4c60eeb695349616d41c65c39c76ba63e1ba109a1ca92a4f1cf10732df8fc6bbeb0d0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 21 + }, + { + "PubKey": "aaf2fbbde844a6e5562f98a41bf551572ca5783eb2d9c30da1e35e87ba7a5bffb9d67a983af6fc628d84ea709493cfb10e9bc87f39862ae18d6f8949c9c91f2fa0bd4fcd8500b733a8d9ae6a5ac9ba697d70c3b3e40ebd143eb19ec5715e37b4", + "ProofOfPossession": "80ce8877074530618d38be94dc129117ccf6d6507b738e76429c6d12f667fed38f9ae282014aea052c4fadc2ec20189c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 22 + }, + { + "PubKey": "b4227eaef678101fd092d4d5efbcc180cd7965602cc5e1f66cd602e717825459ba558e295395672c64eddbbcbbf686b413a6e4a29f467dd9b72957699fcad07200e6397bbf4b8031e64a4892884c6b66170c0f2063e828f3a6b28431cf7d2908", + "ProofOfPossession": "abe6a0ff13255605e12026f34d2096bd6732c43f398851b5414b6060fb890a1dfd1070f086879b545f204ab2eb552c2b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 23 + }, + { + "PubKey": "9553e1eea10cbaccf4d2d19337c5be132b4efe4d48dcfa7cd5641d001283ead531473017a3c318945ea5d7eda7777aa50c32b45c321dbeed014596b2e658869c1661a5f9301a5b5e0b0cb391709b903d979c31c3121c3155a965f9d2efa15a15", + "ProofOfPossession": "8bd6e49c54945b77960686a597c2ad082330bf72df2a7b982733f4c48950b445a4adf585073a305835d680a48f403b98", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 24 + }, + { + "PubKey": "a0189d3c4d350d3222158dd6460b0b5cd9ce526ddefef4680fa912a37ceca0675f0d892f3e93c4140effea9b9ab699b413847597267e5b0d3910c071fa785b461d17a79b970e69af256bea819fe216f8f631b051d24e273589a6f931a0255b3c", + "ProofOfPossession": "b5e1eee8422c8e2e2d82d50c9dbd8cec9d1b9d98037743a5be6cf76389440674ae9ef8a289c94fc20680b6c79fa3044e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 25 + }, + { + "PubKey": "9069d05e2e152272745e457f29d72fc17889bf152978af8b02837be0e57e4376d7f5b853c30a9055fc240e34220b94d30e3439452bcc5aafd106db8ccbac43769bbcf828ba468ee46e48a1412211a0de0c1335a5725e10931f6b9e35cafae8da", + "ProofOfPossession": "993403f6b871803daf562b7d0ff90e4b1e6b964d8fade5842c276224c5a921f02b625d8bc87871c92bdb432e852fc154", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 26 + }, + { + "PubKey": "92f358cc073ba457bcdfbe858190e450b0da99246a00865d7a2d21bc53ddfd62182ba9a9c7760e76ca9f38decb7874600840ac5b32bda0f1ef6a0fc496ebdee2649978f4571966ea84a57d8395371823ae161e250be37d33089b2713403aacb1", + "ProofOfPossession": "a66aa5f4a3ef2ad27da663f26cc9a409b6bf8d4e66c9bfdd850563d5dc41ffbec40a533690645e2f48b082f7eb27be1f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 27 + }, + { + "PubKey": "8e23e82b25e7a54954f675d7c4284e1d2e2522656267318bbafe53f3f141ef84a4092435376f11813090396cc883d0210278a3f78f78a657d540cadccb1a2151eec3ceffd9971fce6e999113a5caad55328ccf8f420a46a6f5660ca7b5df9558", + "ProofOfPossession": "aeae1da440afa8fac8553e5dd4ac6915b4a5fc756ec0c5c95421f6515e53f5dd0fd7453de1ce3ded7b3f6df0ad55c0b7", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 28 + }, + { + "PubKey": "b6a4d9fe64a07305f531d72aa0f1662134851b7f9c9092bd58d097287e138e2b038a2a9004adc567f3bf1187f31b543c0f2d23a6c7e99c05c2c847fde3488986301cc18d8d22a2ff94708aee5e1dc598dbe7b8a9f06f6cf1b2dc9a0cd4cb4b98", + "ProofOfPossession": "a2dd74f4e33f869920566cfcf27c04df4c0ffe3dea7712618042524fad3b4cd6e8777922abb5838124f1a72aa77fc9ea", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 29 + }, + { + "PubKey": "a7b3a78178a1f7b140c57132942c6aff14dfb6326f4f2ca50299f87f53fc10440f72eee8183f4ad872795abf574fe4550fab44b73d38c95279f319e7fb3ecc19e2b8b7df08dda3521887036777cf0f1f3a6ac42ad2769cd7c9607322552b9f48", + "ProofOfPossession": "aefa78f263b0546eea78a6b9d903de76e93c1ca51183a44f387ad7975b03debbc38251f8f3471534f48e3447617bffb2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 30 + }, + { + "PubKey": "87f5c01a0667b7260b92768479d859427f4f1a712b868b46c268eaf2b7da335ac290102578f09132491df377c77811580b49b140a66a50a36f22bdece0692d37cbefb716a93d80fe1dfcfe2e9aeedb3c14e1fa8b973646c76e37c1a2d5b1b5a8", + "ProofOfPossession": "ad814d4d6f4bf7bc834978f3c3187bc5781abc94b558e97ed8146f2b52b14b04361f1ddd59c39152d53abb65dcec1adb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 31 + }, + { + "PubKey": "8ae6735f4a2fda9fa185174691119946bfff994e3eba91055497da5be9c0ecc2557d7bc9e1d66d8925e9fb408ecd100a195a98b0d9a5cb56d6717213acb8c34d6b08eda2f0757938de9b84e4c577c484c6da034c25f88c607c1d4e22850ef798", + "ProofOfPossession": "89468e87c429b4326258b31a4530cb301a5d00b29e2c454fd812bfe400e3972c746943e470d7466887a088ffd6736601", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 32 + }, + { + "PubKey": "b49dd5281004da10ad8b9c6e7003cd18c98bfdf3ba108a139f174e4b6fc32a080d5c36c48f117c3f37c9024cb077612600259ce24ea906f5c8056c6b5f42eaf4c82453f4d7459787eb41f4fdee184e80f760a48d4d99d0a7c739afd830ef6cda", + "ProofOfPossession": "b666b663e621dfc78669c14998b29f3f6fb6c8fb101561dccfc5d88416ede783f92b18b7e7d4c9e3a6f4f7034d791374", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 33 + }, + { + "PubKey": "b74b24e6f01ac4d8c274f97733cb867f5e527609487d191ecfd33c7cdd6e0a2d0118e8836bf15b7a916d6d4b78f116ee01979f5f36799575846ad02af23a50a848019c623874b7bb04d232732e1d38f550ceb7fa3d110241c361c3d66da2f6a9", + "ProofOfPossession": "83a2e9549e2dfd6b3ba27079b9738d34986b7c7e0700817050dd36024fa21d3d42567c76e6d9bab31ef3aeb65963536b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 34 + }, + { + "PubKey": "a72a7bbfa3ebdafc16f445ba70738d01cbc24df146d498acf0f60781fc54361d44740d6d603a9a212eea92fe802d58d3127b316b08b5bece8022541e7560197ae2ce2b0bd93a6d018bb3eabb3925885e5cfe3b709a9a6f7e636c6df7c5eac167", + "ProofOfPossession": "90a7e1a11903e615d45d5fa92a9f917af20f31884761b9f279a9fdfdd2d2b1dec7102541506d44051aa51659b7a9d0aa", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 35 + }, + { + "PubKey": "825dcb99f7f790450e8f82a8924230e3676c7b21fe007decdc4a72f2e7e71a312902229468ef22a699753bdf46eec7e1094ddbcdadff4ee91ebd9423a3cf05649f8b85d86a8b4c906c9235a882b5d86013a7d6d73115bc4324196d5306e2cf05", + "ProofOfPossession": "abd460352b8b96d3ea7614976caa745c6161dfc6a08b0eea4b9eab95e490611ba204b4e63c3b79e4961af81594418a6d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 36 + }, + { + "PubKey": "97c08a3c0a697fd297a6fdc9dca1e3cf2fc5b711424bf2db2fee6221198b897a45ad7f73f386fac50f941cd29efa95fa182a6631d1197748c063740d5ebbe66e98cf8b433ac307a07d2f52ad1fc1ee5e67e8f175c1f49fe7fa844100b8c0bde2", + "ProofOfPossession": "aef43b852b2745c1e3f7111a6534f07f1c731c139fe61c2192d23a4a62103e7a84af2f32a36f62e540fc20456f607a56", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 37 + }, + { + "PubKey": "85b1d34c7ea89f97a08f79361171984c111d36d40366d3917e8fef9f5dbf5f3aa4c47b9237b730be9f8d016f19c3c24f0af8353c0f01a341d826c50f3f6940a356c59367f71a7baa7e10f6ed09943b2daa7d35641f92510d0749e778ab31ae9f", + "ProofOfPossession": "b5f39bd68f9f9d78c9e817048384800a9dd8da5fba2bac0b8afd29b5b939e95eacba26496d2629ec6e1c3d959ae27722", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 38 + }, + { + "PubKey": "a091d0fede3bad6ec01b31404185afc79f827134261725a8b3abe8c6a694844d6d87626c87c335a642171d5ec786e48e11cdd7bbbe22edaf947fd56bf51987f71b9be4ed7880bcac1c1efb34b71caffa21de650f6c731102f3c64247b733d3ee", + "ProofOfPossession": "a0bd3565cf2ecc3fa58f20ada35fd34a0c8f8db9d40273c33677df81da7995e2c518f9ceebfa9a0a993097bc8644956b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 39 + }, + { + "PubKey": "919657df0962d1cc01a7b141ae9bc1c2f44dfbe1a5b8af55f7daf6f3c7de070e49457998b1623a8fb125537fd68866840092c0a24c722d01d1188909cda2328ba22956dc659b6f4a530f160725b36ebb7c31b5f0250fe25447aff2ef2182fd60", + "ProofOfPossession": "95d68835d4c252688f76aa48392906929fe4a586506c7fbbfe3fd9fb733bc4bb23cf620352639e62fa0bac59350cf490", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 40 + }, + { + "PubKey": "990afc960b9566a0f8c749bbbb76d21e3905244915931e7573c1293acfe4c703281726b380945232d87a20cf38d271170939394e0503b0cdb5a9f15615f39b5a89b11d599ea18f4cec4558c90bbeafb0d87614264bcb0879a6fd1b60e3915dcf", + "ProofOfPossession": "8eb9cf5a64871e8723f32c54f650b736cdd40bde1a5f4d1895c6e6b8d8f9339616d29a93d0c944f1c12bdaceae455229", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 41 + }, + { + "PubKey": "a1e6f61a2f6453b24ffa5865ffe420a928994e62ee19c7073cc13aed54b458d7a5f8af7e03d0f96662d1375ccdbf119117aff72cc2413848deda31f269b1a8381764be79dddbd87f3fc898ba53c2b2306a0ae0d54a00a65604e43656bd017050", + "ProofOfPossession": "a2f2d3201b89155d2e4e01eb2a4f8417dffc1c70db07656b5a4009427c8a3ed17cff1c8547b84a1ce0ded0ea60256ae1", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 42 + }, + { + "PubKey": "b55d77a13e7a63150c37977331ced0253aa09f436da572363e26052d60f1fdd1b92fb92bca329c509157f6d8926d3f9203da99404a44e066c4815eb7b9e59756853bf9317a9472bf5a02c79bac078d0954d34e775f0bb94da660d0e651cb79b8", + "ProofOfPossession": "97576b71a67f03a26a0f9ad84b83f0543ff357d1f0cfe71c9f0090a890b66af44180820fe15ace86950b1d9ecafb1547", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 43 + }, + { + "PubKey": "a5daab0f25fc86c758c027091c3074999133ecf26e3fe013d6b2a157e6fcc2bd66811b55e5f28332a5f7bb56215c7ac510090d8765048a85bb4410130e06437efb4f431fb11a0c24ce6cc535df73acf4eefc712426b3ca00555f83803425c5ea", + "ProofOfPossession": "b2a4561dcf03c259045ec0dc116a78805ad633039c20e5715c40eafb6e554914dd0ea13e246dc0b25ee4f96f85eef441", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 44 + }, + { + "PubKey": "8c3c9e1063b7195a9e23f225e5759778300a69a401812c7a5aca22bc76d9f81e946860efde48dd4134a9b8b05ccafbf104d3ea8eafb19958564bfc0458709d19d1cf8674e6e4ef80a3e8ccf7ed00b28db720fd84802f5c2747552dc69990518a", + "ProofOfPossession": "af79f5b526ddcbf42bbe4727b0b0b9a065508c9bbd4632fca0ab8d45b480499f6ccd54318fe6b94a8558c55f799b74cf", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 45 + }, + { + "PubKey": "aa7873ff07f26fe7591358e03c75c501dc103b11c2257ffef35c99fbfee73db61b306cd66b32e6129660345b6da8e4b303eec3fc9505dfc12380658fb37fbcb2f485bd68df20458f22258e0ca07ba9ff7664cb670953229cf4bba07f2bf58c87", + "ProofOfPossession": "88fcf55381207b836bbf31a7666e9aaca6d774392a3b62fba4681f92da7875c2b987eb87824c14c9cdaef496d3efd024", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 46 + }, + { + "PubKey": "99baf84be872d6d0aba5f48f765c91964c7e7fb0b28b7414afb9a66dce7919677a37170ef4cfd05e101d4dbf7683921018f170e8902ac2fe83d1f63745aa65c16031374b2ed2425723f9da723b39934558f07f0b8459d681cd146c702ff3391f", + "ProofOfPossession": "b3779c30bfd4dfd6f0d9e129771178c85b1093e2ecc4c3f247c59163c5bdcccde0d00ba36db25ceb5ed3b54b02e5451a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 47 + }, + { + "PubKey": "aa41c090e5b9efb011d581caf18c8ee3666c5d5d92d1c81556e44db581392e27b9efa5b86996864ab0ca6b7f28eb5dc6097724a351a5e98a6970712043db834d6ba79c6fe888892a4c1cd30313b54bb1ae229a5a12af73868f05f71f02515ccb", + "ProofOfPossession": "ab4e29f422b6bec2a756fc3fdc08c562cfc5eef4a183d4e828f4a540f97fd526a30e6cc17f3549e2e57d2cfe0fda879b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 48 + }, + { + "PubKey": "973ada24c3f4249fdcf4edb025bc82b75cf068b0d555823dce556343dab19f5723a8eb53e449de319a9a3ca7aedc6ce0178379a244ff1822db35c4e77f5ab5188533ff350bf3d43a25392bc04a274c0015dff95c4b3e826ee5e4325df779e996", + "ProofOfPossession": "967f4e8b54015f4b7127d3e3d002726b8d1bedc01356210e580e2d38c7e7c772eceddf90dfb10ae3201bcd334aef4423", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 49 + }, + { + "PubKey": "b3d9e2e6cfdad944f5c4631c3b62b65bf1dffb6770031d80aa1809d3cd2c50b3e03f3f53e0ca259ea0d2c5a5ab99c2f10d961d2b9d6c5ae644f661ef4d8b56c405637bc086291d3f364ef7c8a584814108dea36a6a083bd6bf0c7d374cf7b26e", + "ProofOfPossession": "a32fdc2c9816b49fce1dd8d1c60a69ceec939380c216f9ae1b0c225d51ba050beb0dc9dbd785583ae23e7209f511015f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 50 + }, + { + "PubKey": "8d6944771a746ec1bd5551563e561e2588811e4253f0ea3ea3c708317a3f75e168c74e25c41aee22ba6b3d715dac3d4e05512ae3fd6a4bd3c41f5acf417ec6557097c45eb928c2893a67eb10b27c46752e7a6b850ccf3d359af8ff5d5ff72a8f", + "ProofOfPossession": "b946c8094c29efc1f0d44307ea58cf39642f7d0932b8ac9c3db96c70d42328caa453c50aed9afcacc4f84db422cdf944", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 51 + }, + { + "PubKey": "b5b738968bcdf4f8f628026d32c26ff343a305f9f7dac839434fc4567f0a66e3451b831087dbbddb17c9b525d4a722a00a0ac0dccf5f15ffae6773f805aee5d85d42d8a173d639a3ebde9c7c3f968b32a2ecfe8824b1108afe3e55b43e2b4bb1", + "ProofOfPossession": "84be71f77d1a4d4b88d0ce775e35d6533bfdc1d5aee6a5e666e783f0761b62921807955850dc5e8535b9d623d8238297", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 52 + }, + { + "PubKey": "ae3285ad738c80cb3a7ff12200246a13b42332c3dbfa1612ad5c5cb0c093fe89d4611d6935453b8cf5b4e74596b0a19814dbf480223c52e0775c9900a108ff5150cffd1a1141412ab02b37fa261d9ff651c2836a1dc647c845847382860547aa", + "ProofOfPossession": "ad5308442487af30195a2d509136aa1085d602ee85a2b35500968f0ea763736c555e0e06da40c412ddeb99141ee6ab83", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 53 + }, + { + "PubKey": "8e75e8b0aede9885e2877f7323b768b3d98c89729fbcfb10678f0afc7827556206b650bdb4600bf9fa97b5abe52681a70c2638ea3c5db163659dbd3fb9239a8ebe11ab6da7550bdd87ceb2b000fa3f4d6243eb5d54ce4d6f7337ff64e305cc54", + "ProofOfPossession": "9962e47215e05e7eb38209af7b43a9560fbf37a605073bd07ab1f22fb47e7b4ab0be886d7a062a20f64c0c2fdc17cd36", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 54 + }, + { + "PubKey": "8883cdb15adb4a15663abb695b812c6fa990b34d9ae531e697ed6adc9e7dee88ef276e4da2ea5397d8a3f1240f57c37912dfdc72338c73f4e319655352f1059262d66f5864886e83d9ed36db0bdf9a8c597eaeb7c2c65ee2f1ee590372fca10b", + "ProofOfPossession": "83ca3b60636a75370fcd42e2e84d6f37c0ba9eeec484c4d74ea8623e768f058c88d75aa6f460dacbc29432e81ffc5443", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 55 + }, + { + "PubKey": "b5092663dc36f32428a20a04b37f5bc1ebb3fe830534b31d1c8e4f7f537066b1e813599002fb111c840b707f2c218cf61544687590131f9a5cc13dd4fb2fbf3e48c434ef1f4673f658aae696da15285076908bedf900f4d919d71d4c66d032fb", + "ProofOfPossession": "98d164fd7ba8a1ece51b90f1414ed662ca5e24e8033e51835fa40d6a634daf247b65372c92f4069b22d5ff85b1319912", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 56 + }, + { + "PubKey": "a734b1f65be0df55cb2e7aea514845f430d80ec8d17fb88497dcc1bba4243caeb87694864774c5301b7a4bf8438dfb0b19b87bed21a7804c24e5e6904a60e3c6cee67236981b76071acc3a4d6327937adaa35e941a0119a44482ada9e00d451f", + "ProofOfPossession": "94c81b283d8f146d2648cb724037e0ed2ff3b90ca24fc019e2ac935caebbbe373c6c8c09b70f08ea14619fb87dfdbc52", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 57 + }, + { + "PubKey": "9853e7ecba5a512cf344a41f5319dca7ad614273f55d7690534b860a5d9258819ff6c14df1390bf11ace3493836804a20915e3c356d0e0d83ae5940665d05a3c7cef5ff52297070586befbbc61112a983be266bd6e14310a9a232082100df824", + "ProofOfPossession": "ad83b4854a0daa02d76cce274646992ea3afc6ea45f38a475b7af448e9cb1058de3821efebd5d61bf6ad07ec2649c715", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 58 + }, + { + "PubKey": "a0fe25245c28338af9f05b481bb0e0e83ddd0f61082b72155017561d747649c5ccb1e6cb084c8139c1764a9b68e69e0511a071c6010025a71a124b02557513ba7e00407eef6951282e2fbc2434785619f0e1abda588e15a5e97d363bb5dc4296", + "ProofOfPossession": "aa4cad284c321752b68dcd98332bc779e695147d78e3b262aafd6088a160fd2d54c1978bf4cd696262335dfe955a0033", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 59 + }, + { + "PubKey": "8f219f90b2a4c62be892444b15c83e8fab259c9e720b6a0101dbf2a21a32bb9d976e68c633b2529e76d15c2b4a10c84c18f846ca9cac100470d0f15e84d0fbf5e0e6833eb4224a2dabd4b873fbdb82bbb49cf62b30a5132f01ba5a2a5b1cb92b", + "ProofOfPossession": "a6ca7576b45953b757dca4f073be18a787390b5378765f8efad63586d36c5d255828eea7521767a76ec9a86d6d1a8c5c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 60 + }, + { + "PubKey": "8af52958d9a0eb6641353e81ce462ee51dba211e89277f69d64e21579c844ecc9a9816b8761699364c99d48c36f5df58167c58651128c53b2504877bcb7a969670229a5a2d2a7aa3d98bcd1a7363d20c006adb197e5d76a35afbf0a2d39fd455", + "ProofOfPossession": "a0adcb9eee2abe60332c5db0b6c7967a7329572d220b551436700ed07ba65a7f0fc5d0649a8d42d907da4f66dd0c62af", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 61 + }, + { + "PubKey": "a33977f327823d6086add9c7047cc1a6b29452990e2ad44ea4822aceffa1b9ba46b6a6a2efa3c60614d30dfb02904f95141fd954fa6a1a796fc6a05f83f7fc182e660d5f87fa29c3cd54131ca915ee468435483719cd8c22539dfff4fa484062", + "ProofOfPossession": "94a956ad2cb55a65c707cb995c154553539e2bf012b414d24f041d56b067e09899b1b894fbc35d80621ed95ea75b86a0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 62 + }, + { + "PubKey": "ac4b315dce26733b65fddca92706ec1c0f9e7e48ecb25f62e78d03b90b0624c40014d24687017a85bfaeed3d66722aef0d1156b9aef2e80077d2ef93e4f4234913f7025ae5e1ab34baacd0e12dcd4d591d01bd58cd45fd78c70568c12b1699cd", + "ProofOfPossession": "94c6448ee3d34f4624e45795f270fc992d0f921547356feb7ac30d3a09ffc6968da7fe2deb487bbe621efb47a9c7dbd6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 63 + }, + { + "PubKey": "b1bd1141fa75b07785d5ddea483c9e17c42fcaa292b160b3ef97aa610ad739a87d04dee0d166b2c4651bf39153d4f3250720968c214b6c248a7e1ab0d098fc988e434f0b6a9cbc7930ce646e369ff27a83fe3c8eff179a1ee8d5dc1699125769", + "ProofOfPossession": "817f2a8ec16929e3977f2aac33f24067a352f9fe78057019c585d7a5704b59bad6b754b3709bb23fa72b78ff3c2071c3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 64 + }, + { + "PubKey": "b3b1c0ac997ab7496d5137646b008525ba6a313c8599740e187cef69a12bfe9b278ad399ce67c1fe031e675f02abc2a910bc849b3528a5405542204514575b15ed932c97ea2f7f7118f0b879df4040e3ca5e9fa179649db53474f03463c46dfa", + "ProofOfPossession": "8bbdb214bc00f59c87a76babe644a63f84a5923a7ab45abb85f13dd3f630a067bd6bc3c96cff690fb8152d46c813f0f9", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 65 + }, + { + "PubKey": "82dd4a046524ab2fde1a67183b29ae75914e46c4c9ebeef15274d63abbea9a96c673390a310baeb9f58391f7d0cfd05717ec1084c4fe3cbf684b37eba42c93c6bfe697b5515f60529fa85ab9ebd5f2bd7a40ee406d05061754f0346958b83ecf", + "ProofOfPossession": "802d24f0d4984341b75ea18e5afd132c7973294014a1c6232fef8a76a865f79d28a64b9fdf514c25e78156340e768bd6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 66 + }, + { + "PubKey": "a265a0cd53e6d99f2ea47df7f55442b769ed4e1527c1b2a7795e94db90c34ab1ff53ba04598b230159bfa3e474a104f3017dfbe96bc7aef5db651fec1a37651636b7753b2349415a2c50fa8cec21d35ac5e68915038e5bad1be1c0fe4917a1be", + "ProofOfPossession": "8afb0c8da405bc8f54e5a0dec93c30aa216d72ed302a6cd2bb8269ad8170349ccaffb57a3261e56d3d60ab4facd6e0b5", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 67 + }, + { + "PubKey": "97ad18a85cd3d25f629cd39c1cc69626fbf599cb8973696163c322663fd77e7135b85a22085fb95d0474b7f51cdd2c4000e0c0ba05f78ed27e48db75b7b69cd4e5319e38df943e2fc86cd5643770483ca4d2f803f0a0a3182ae3b826c014ae6d", + "ProofOfPossession": "b9efc5bbcf4cae32fbc910feedfadae8e58125c415d02c7c09538ab3fb462168d9ba038e78e2895d4d7dff7393b314f3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 68 + }, + { + "PubKey": "987ae2cc7020def0aacc0e1ee711aed9ca7616b05ddd72c9b660a1b0d37d00cd2578bae0926591fbe394eb334b796db000cd37816adf7c69449241549d6f08736697ab282d129e9f44161d9d86e839c4509e3d4dc9a983e0d86d824df6212cab", + "ProofOfPossession": "96bad6025580ed130f8bb1c7dbffb43bc7d0712e1cb12ed233e35e7555bf859d7a0ce7212c2cd19898c6ff140666ca47", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 69 + }, + { + "PubKey": "8dab2bb79d19cca638fcd8945cab25642e95f15140d4f004b07ca2c617ed6b69e70911bc566e559f4dc9c2b70f5cbd270ea4037fbea81455550b47f8042e92b8f0003fe8c51b50dbea4531ffd49e89de3770b54b2027d7d69a26c67055a9992d", + "ProofOfPossession": "af43f5ec2b318d69f412c04c481ed6b3f343d97672238fd9b83b85d25f5125a3df4d484677825d9ffe92eb84d93af03d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 70 + }, + { + "PubKey": "8d759e0b1a8cc55901c578627c7758fa960407540fe4222bbe237f257f01cda6b4ea7199629b698175b2b932891cbf1a04b332c45d0f5fb35b2d96fad15dbe10701b82795d2d73f571b0602600db752a762b604ba5dbd08035c401390ec17128", + "ProofOfPossession": "a94d503fc8feb293c683e2c7e793872b88705fb89afccc95fc1479ccf4973226a8e969f5c399b08ee82b1bd3b2b6ab2b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 71 + }, + { + "PubKey": "8f6eedf2d85a14abfa99bbf2810da1008dd6554149239143b27f0da6b5d73f9999bd4d0749846fdcfb04438065e446fd055f62dfb64802e017f59f1cce886616fb303735523a87718a253d53d11544d9563bf3f4261b40eac5d055d1a875a8d3", + "ProofOfPossession": "8d71cd1e1dafef8546806505eb7dfd9520eb78a17de333d3cef5f9cb0483f28bcfec534873c5f36f0d5d7304eff31a5a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 72 + }, + { + "PubKey": "af986ab511a5621f84e9038d6e45eea6f87b851f8660a5ca89ddb12e8d6b25727e45e258dd39786fed4df5f9595d0ed70b2bb862d090d2d7af886e50cbd9cd97ab810e8a0338ee201dd9e6d1a9adc71933f4832a250b17f9819da2354f304d96", + "ProofOfPossession": "b4878e440668bd8f96f002c5abc12124287b75fbd220f9b80d8468b82d2dfd718fdd8a00a725a502776db720b9666fce", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 73 + }, + { + "PubKey": "af969c348471c2de18e612b6f51ce7842a57e9cc4c77d566abc9d05b0a2c7a026a84bb330d0b0c392a2cc0e7ebfb82fb12166fb023e7c0674867db02e453237f25850dc6c9d09563fb89b80049cfb26c042c7e1e584183391e88829589068c31", + "ProofOfPossession": "a94171a792e0fd70d3ec7c1f17d565099423cc669e323e983dfc4d5666fc35849534a67ca5d3e317f517b97a0be01a5a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 74 + }, + { + "PubKey": "a96e7ccc4e35eb3b6f344e756377e5b5dcee45340ad5fca0461417ae6b70fc87c1fb405b927474a2d1b1b934189da0b80de294c3a76f58899c6b42c072b7556455fceaba1ededb20a98bab13600c642456e55e6ba91f9a98e6287b68d470b435", + "ProofOfPossession": "ac983e1efa31bb43b20606b813c157a6be7e2c48481933a47dc544fac87e4f4c6aa6ebf6ae8afe0ead4a39ac2ce95e07", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 75 + }, + { + "PubKey": "a61469d10fac83a04a173031523b92654c1fe8c4ebcd003c866b914eb733b7df12a8ca97b20f95e454fad5da04ca8c93165c798dc573cded81c0b3b11e3f3938654de413320f5798f544e623d7e7392032429ae51fc6c513e453c6260fb8df1a", + "ProofOfPossession": "a51f5d5537c4ef4847ca56a20549f92a0eb35b04dfdf11a669fc5b80d3172ce64f491a7a91c655649a9345d01ae23e9a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 76 + }, + { + "PubKey": "a083f9d67b1c75519995af2320208ac4455c3fd658bc214733303ef845b8d2fc5a21ff699b31a72f35c758f23dafd34305dc329d88bca508f59c2d74757e7b1287371fe614a25218cde6dbb3fea508f254a9df373dea46fd91c41f5a2e793f0d", + "ProofOfPossession": "8af6142982f621a041de9aae1ef8181add49c9e3abc7cec527ef36f24d5c8291c9dd256b548fd2edb1dcba9adbce628b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 77 + }, + { + "PubKey": "a0a0508750786d428f7e4d34132bb9ff890679754f7ddb7ed8475845919e052410be3142ecf9bb85c2865d23e35bb72902183448e725c29c7f841bffa9eb83c00081c777a25e47f8b43531fd085bc3a62233700a345ae6ed6626f3e37ad21bcd", + "ProofOfPossession": "8208f676584e5965d83ca4fdbbee63e72640dab6d353f4fd73faa2350d1fb1e2f12cd6ff39661142d91d575f3c004928", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 78 + }, + { + "PubKey": "89d9d2c345f30497935462bfc929cd01ec6e5ac0af69d4ba21d41d63fb0bf3470bf6523a95efa2f555c13f569e005df50250d40947f0e0d9717e459ff872abc5c0cc9daf6e1e87a22cda96fc17f9736bd9a991eb88963b3684f965c4c203fa81", + "ProofOfPossession": "a1371c877617f83fc751cd9900e21d7fec05e233c28ecfa02cb6e03a51f1e4f67c1b9e3ebf48c00e6a6ecfac3779354c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 79 + }, + { + "PubKey": "afd33824a1ce246f48ada2b26bd4883411710e54d5753c517d35fa320d462dd168a9dc3d223ae3036ffffe8ed3e6959e00b43841d3ce04277f728eed32ffcd570c6c0f0017736834abf8bafad77a543d26f4fafe8ff7e59af529bdd32dbcefa8", + "ProofOfPossession": "88f9e46dbb759d7766d58b3c1757a69ca3eced4c52bd1e4fc05aa8adf134e2ce93c4e00a86087b5beaae74f80a8e8668", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 80 + }, + { + "PubKey": "8ecefdc385cb170ecb9831f4a57b20eacada9d60a3b291ee04fae645d09788b46b18b531ba9adb9885064fdf0991f7a3130d107136d0fceee3ba8bd575430cb168c76c12bc66c67ebac5772d53fe0cd09f40d24c61e03c642fa01daac63ee1e9", + "ProofOfPossession": "925daea8c80241d65fd5e7bca801ece72f3153aed496011d7ec240bc5d8500a03f61a8c76fdfcae81c59da3f090a3207", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 81 + }, + { + "PubKey": "941c63cbf533863c571f8fd6bfffaba52a8c83aae16276ea46f1c78531620613d7a7004203e3f0cf61adce92908566d204a1e73b271e2703272f59a3b120c9db4bc82bf0f610b43b1e251c834383e705ae196c6b458eef4a311ff2b2ae9f89b9", + "ProofOfPossession": "93cac127c98d417795d3c5a7f52177815b7c60da5ec66994e66ace2d4acc27dbc7bf3e44b8d57a22cfa0974fda8bb52e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 82 + }, + { + "PubKey": "a380ef477b6dca8a55933e07c0cb21111192b4c57eb6e547fa1f1b4fb9a2b4ca43d9bb5acb7936019123d59346c8e74e0645eea14abca1f19a676e8ac32ac27a507fb15bf0c4e223a79b933dd34c52c79626384a3f1df15a66687b41eb253a25", + "ProofOfPossession": "a53b1a604e73cc63201cf5dfdffb9dc9e57bbbebb2010a866aa6b41498b66f6a7d418569e88fb9d90f9c702a4087b08a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 83 + }, + { + "PubKey": "af3db6cefb4ab9262fd9ec9f859145481e3b598917705735576e581bcd1e78237f232c9fb1cc17017372dbefd7e0f1ec0c991a8b18492976bfec42b90971d37fbd05966caf4a23054b418e70d2cb0f0446922b9f1dcbc79c84f10e96200e08ee", + "ProofOfPossession": "96f306b7d828b7db083492c33fd04bf7d6bb625a25b2159bf893aaa53ee217a4230b562cbe7fbb991bf6baf7c0d3b432", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 84 + }, + { + "PubKey": "a0c0c0345331eb8994c8b2e6abc854b24293ade7e8626d4b65cf780fe0e2904f8855ba52d2802f457126def786be295c0552af27c9d0d4ca780d5b5fe186baaadca68c4211641c047a192602ce95e276a51a4af85c26c5123c5dcacd4b3f4c81", + "ProofOfPossession": "b945b516cfa804d08c872b3cd00ec5e40618e888dfde6f83520563e2f2f84440ab2ef5e9b96c3d8e3cf55c6f73976cf4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 85 + }, + { + "PubKey": "b6ab889aace6cfdf4253037dc3bd0d0a8b22b5147e9e47353dbf5475b7bf5123ff948efe00bb9553946ef5470e493b0f0035c873e2ed329bd5834c8566ee0d94fa0372c97acd0fed95884308f00b3c940432f39d9256f8ebdc1659a63043d487", + "ProofOfPossession": "a3d8228da7964e3d4b87331d7aa49d2793733aff80d42a07ca1aa806fb96468098e58a460288ea0971fcf095f427d304", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 86 + }, + { + "PubKey": "b43bbb4feb0376a4b1b849182a6450ffc615d9caa5e62fcbea9fa8da7777f3e1d5366d06974fbfb33be2f0d7fac276dc1372dcf1703c90c5caf245f8630942c5cd34256cf69484bd96bb0fe84e81566260b7dff95ee90cfc7c41300c92334cd4", + "ProofOfPossession": "94868bb10b7a8acf1adf8e526cfffd9793bf8b29756d52f2d622795a4e72b740de6a6830ff2f86da6437034332cce1a5", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 87 + }, + { + "PubKey": "8195211562a94117cbc9a763f9b92724587d7f0b2ef33808b19abbdd65e5c3de422f92f1d966a54598f6abf6b7b2ddc70d16657c693fd564a6ca3ebc422b82aa637150cebbc11011301949a0f35f9ea72a0fd4cf2fb176fb60ba7b682674641e", + "ProofOfPossession": "89990e14269367ef9f4cf79e687ebc35e790e7fbc52c6567a8a804835da20585fbd114aaf949892ba52cb14d646624fa", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 88 + }, + { + "PubKey": "b1a8f7214f1083530cc9be152f7300802221b47d2fe6dc02c80bc588f873596b7db879052a1b5aa8a121bd5357682d390d64652daab6458e036b68d042754b5e7dc7462c887d28b367d95d9825c034a0fcf929566da6e1946a9acd56e9a165e2", + "ProofOfPossession": "961ad031cdd1252374764baf7845871e2d4d3cc4303257a18aef28fd0b1ebfa6cc7141c68ee81f8395ae78d061bef50d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 89 + }, + { + "PubKey": "917adf09d708edd58ba4f6ac4f6e49812e176f25fcdccacd3958b4dc8c83beeccbcd7243045037543a1686a2ff14242909b52a6c0b420c6db2435e1f65e8094e6b3379746a14f87d652452cea8c41e886a87c5654fdc1e60b761281eac350531", + "ProofOfPossession": "af779480a5c62aaa5ab549144d7d7ae9ecbe47631ec20984f90c629318d7620507752b2b0ed54094e7b52c78abfe55f4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 90 + }, + { + "PubKey": "a533a57673a0a7e6da1ee42a0a3810af6dee613a8d8b8a1d9b0486e39d2f115bfef71c8a17cbf5a1c637a8f6c344b7040b423fb2a743c94ae13a5e102019fac2775dd72bdcb43aa6ca222119b50518f7722f974fc73f53914c3543c47f63a761", + "ProofOfPossession": "a66a94342a7fecd6150cf14ce7b99e025cda772f03f89f1fe9705ca013be05384d232a5c9959ced13d573ac3dd98d7da", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 91 + }, + { + "PubKey": "911397d298404402fd4cd5acd93b9fe0e91d2dd1ae8ff8309ee12de4bc4c3307a12e4e0397f048d7ade2339e511db3cb0d2aba473e24260e556dca5b35b216fa0df3c41ec50887469803665849b620595b381d16f94cfdbe56ebf119c1510d34", + "ProofOfPossession": "a691f2ecfdd4077d0a1fc1415925a7e63cf34fdc31849cfe98c03e6f42ccd38effaefdef9ed9335fa1eea108211b14a9", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 92 + }, + { + "PubKey": "8469a09731abf4285f237249f6ebb29f0a9eeebeaf5e9f788c2e18bf425cea3bd9bfdf5b6778d0dcc03c238ecef2518d147bb53b6a993c33b09500537f91fe0fb5495e74d81ba75a1e756e993f9048180e00bb5477ff07632fc7df9080c2114d", + "ProofOfPossession": "b4827b40439929a3bc33e5c042cb5b7ea4f69c95a5e0f1a59c041d06a39eeadd48b143d60a88295e063cd5ee36a0ca9c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 93 + }, + { + "PubKey": "b8745877caeadc45510be15efd48a8217de64b7d1302683e73d375082a84759a48d6c8a0715c013534d1f192f9a5c6510610551a784c9f5ac1755b283c70d44d8d679b73f328f193a2960fb2dbb664deca96c70a536da94dba5dc5229d38c7af", + "ProofOfPossession": "8d102c1616fd15c54e7d9d79a9b3d9b577170745754d2d8d7fd9906f298b46602b3610c3e2927818b6821aed38c54af0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 94 + }, + { + "PubKey": "98107b3246f7ba2c4caa2705a35d25ec36592b8b90a96cf9fd4544e867452649a08424a73685a7eae23cc43c95f3f85f051d3268b249f39e66a7624eca7307406779e998a4c2ef1c32f8832f3a16d70b943914109fce1c1550dd76f1ee486839", + "ProofOfPossession": "a087dc11e9b089808c2417cd0ddd1c0ca59092b7278f2ac96788cf916e98433ee38dabb0e2465882d17279b462951b4a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 95 + }, + { + "PubKey": "ae5f6d9aefb3daab164fe55391b0561a3fe165af225360392c11e105957e1a3b65954e0e78c4f59a3a7f9a5a578ae24519a9f6d1898078ab3294a52360552ebe7db68b8fc77904e678e91a2c0bbe0a7cec9c84291f7e782a73ecac922d6a076d", + "ProofOfPossession": "b9f8a654f922288c7e2b433356faafdd856cbe2334f698c38a9e7f9575f116432ddb61126a85a03b1ee5d516d13fb7d6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 96 + }, + { + "PubKey": "b8f0b579a9689a0107f3318a731fa1e2c44820ccad85c678e2a0685eca09222480128b57768d6ce76d80266a73b36d4e1193dece4c92c4f4da4960865c2306151cf0f55a496fb3334a7fa8f7fdc6575e88cec189fa556b12d57c0583eb5e725a", + "ProofOfPossession": "aad2d6cfffed13eb239e69ba389ae0d5d980bedfdf224e9cc222ef6e0ee2a11c795d2fd3898206c42f35d00177eba09f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 97 + }, + { + "PubKey": "b25fab0ea19d924930e1e9c360fb199f7f741076b90bc471d351b07d07c402114555052aaff48c4358697bf5cf24423c15bb188ee5ff55e9c51fde86719d76fbdb166b9f343876ff6185ec65ebcd8d8f518c636c036109dc7c768a3fca3f4e09", + "ProofOfPossession": "ae2878d12a5828fcf417156a9b1201c9101aaef4cdb1231438e18587b3e1ac653a0ca75757681d540d346dd7ef0b81a5", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 98 + }, + { + "PubKey": "837ea4dca4f09b3f8d944490e486674fbb99e42f9c553179bd4fb0004ccbbaa49b167ea92fdcb493e75c1d1498f4b0950abfc6e253c1ad050afa99d1149578d7b368821deae2a33c693c7fc3865cb745a92573a18da74b56c67400e3d36dbb47", + "ProofOfPossession": "a171e6e533290d5f3df8ec7db5b9fe4842e81e5e6472830e90f82617b6737d6bbf636ff0d798f22e6de90ce0783d38e6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 99 + }, + { + "PubKey": "892fd2013dcf8a62229383de0cc35b9371236a314a21298f2c53bce44a3b19571b9a30763f7d94a1bf9edf7bf1174ceb0d132d8f147de45e0d2d8da761d06a73a714571c4b3cc9234bc429dbedbf4e426f1ab4b71d5f5cfd670fdab3484cd033", + "ProofOfPossession": "afcbe2553d55805d3dea46db0f3a88cbc4339c2c7c5c8e21c576fbeb7b98aa18594c6e31afbcfdbeb3b98702a521adbf", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 100 + }, + { + "PubKey": "a5769c432709c4304ccea34080f33a7e6834a0862186bfe90737b8923ab25acc6c151a76eb5cc8c316123628812ddf881747457b06f7b76d2ee4f535864ce6874b7ead65020424e43fdf03cb8a95717bc957c13f9459259452f189783f6e5cbe", + "ProofOfPossession": "a285c55c68e25814d940701d81b4da35d44cf83f79a32083ee9fce238b86223c5b3926e8412e273703c28bacb7d187c2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 101 + }, + { + "PubKey": "90f49c677773371b189c244d3f5e69ed4909d937b01446361659b50c6358ec2f7e453f4e76240a7d40ee0c56447a984e0e244ea851db95d09b4ddcb5c8718920f4e217328b13df433e553de45d5b07248505328c48a6fc2ff986b41b2638ad12", + "ProofOfPossession": "963131b58e85dedbc369c09160c55b47d18807a9ca4258bd72f419a63dd7755711833a4c070d7c35063a6a932c4c76f3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 102 + }, + { + "PubKey": "b79f88b93b6baa741d872c3e59e4c5ef232a380585f89d0cb9917f2a2a59ca68b7d553d0050487670565cc347cb6045e0491e2fee3b64946742af566cb31beb2152a435d0e40fd63477278ba99176235ce8caaf62428fc8cc4a9da2d981133e5", + "ProofOfPossession": "813f0fe3618aa5f0ec1ca49c0b348951b5f21305b00df380b2bdd2802268a02b372e1b259f908825ef36146868558178", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 103 + }, + { + "PubKey": "89481e4cfc08bcd4f253c79ed3494b261656f680a7eb7cdf37cd34db8026197fa23b99fcf5636d26f7921e89c9ca82ce175acbd0082c110fb131fc273008e9f34f5a732c722f149b7b546e9a7cfd819f3d12ac8458f13435d4dfee299173b443", + "ProofOfPossession": "a73843da932ef75b3eefe905ee57f84448118098db176ea86ba79696ba530074b319bfc4a3f8b1ce0208b38d91b9d559", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 104 + }, + { + "PubKey": "81fc98e223f3babd8aef24a9bdcb8dec9527e1e7fce203ae20ad55eceeece5c2fa8e595399eb554946dc4f25a9e346c90b6d441ff582924ecc6b81b59b618abf2e646762f2425d2f52f2a01d882ebcd1902b0d3f1fe382df98ed702e2e5d5142", + "ProofOfPossession": "8c627cca23c376ccbdbccf036bbc50a371550095e4eaa7731d752c1691a6ee349832cb8731af9f38e6677bfd101dd965", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 105 + }, + { + "PubKey": "96cff242f484ef206f7ba605cf90daf917410aa51ced00089e7799ebe0ffc0085f89ed8663be1a9162f174aa05e18ed70cea1f9f2a406863d1cd0177d091e3e9a13d58a03fcc30d71dd467d21f44d318d56dd5ae4f1bb95326f47e9a844549f2", + "ProofOfPossession": "802a6a3416ccd54883929200315e8acd4ca3d33b996b4253b1d172e4d1e6cc5306c89b44e6cd3317c40359b031e14be8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 106 + }, + { + "PubKey": "895bc20c4d2409e4111d11acb9793322786a23232ed901503e99a740948d41a06d474b702e9374084a6fa9f7e80d8a45153ae65d7b03e3980570ebe4de646af348a4bd6611baade6d158adfb791b128ad02720198b579b06c462dc5a6f8243e3", + "ProofOfPossession": "acdf55cdaa40df46a155ede4558c1333e649d0890402c87548bd9224495745cc6ab90df30cfd9fa9102905e75169c786", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 107 + }, + { + "PubKey": "8caf870b4ae6324f2a536d78508598588f3251eadfead6cbc10bc3e2e4997a60228744c5c1c4627b1397c004bcdd4e8e0e0466b660b7b2a994ed4f6a272983c25ca97cab0d5fb85452c935a7ba779f25ecbb98a0dd52c9050e78100fcb338111", + "ProofOfPossession": "b0ed0b58b00f0f1fba9b388206ff5b3966b03161dda5e43d4663f19ebac88fb06d2e2b51f969bca428a88bb2f816ef16", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 108 + }, + { + "PubKey": "90d1c83e79f180830bc86ad215201e945dbc348923cdb5b2408390ac4b3a4680e11ac32770d7deece6ea5bc4d0b18157031227113745f084ca2e796579f10d05442ddf75e01dbe48414ecbf2ab32c95100bde927f6329007851223fac9558099", + "ProofOfPossession": "a1af79006b15324a2cdf54f4e4451dd51a51bcf7a58f7d2b05fc4a86cf4fe88a3c35944a8363aec317d457a2481af789", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 109 + }, + { + "PubKey": "a311e092042d82ecbbd3b1ded5e082e28758cb61e5c4fc8c217096288e114f5f0040cba47b8a135630d37b96320143560e66fb409ba396379c04439d013d34cb6a2aa2efce5d8811128ed098ca2e62c3d01a0e072c31e925be5cc8a7bbf0862f", + "ProofOfPossession": "ae88df8767974d756835518e5c4696c677b943ee9068e0df8c9ee5e5c15dbfb0e3c62b04774899f7ce4a22fe344f9173", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 110 + }, + { + "PubKey": "92f586ef5ab55514c6bd85ae69cd0e6102b908d19e2242f811cb183a577627cc28fda13356a92be89e5064ac6d0f4828135c43f4d61f0b9861524d8eb150f3d1b00516d489b3db8633b1949000c8a54b4a11fb845bec83c410b256d9e16934f1", + "ProofOfPossession": "94f6266579bb24d93d24cef6764b7acad0081ae1f54c82a095c063d4a9c8ea0e99581c8bfa81970b0f0d149407ea895e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 111 + }, + { + "PubKey": "a272bfa89192961875252fb68368cb60e72edb806f6cd407aad1302a8aa294797c9df2d012c7515a586995ba9b1d58220b5b78b7ebbb9394c186e969ea45fcda0f5283030800643bdf6facec3c4c0824349be6d561e395cc6c6defd560aa982d", + "ProofOfPossession": "94291bad71019dd17d5a3173e423e56afbfdb0832a84dd3139eece9b7c1097bbe2cda1a400fe90f97682aa4c8fb680e3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 112 + }, + { + "PubKey": "aef9049155d38803d797411c8cead685bdf5096fd0067ed85c784982ed09bcca0ccace476b9972d5825bbe4ef551e5750e394d366ce3a279ee7682e11f6ee4d0bc9c569f534b16fff7e824e3e2522214df2b65b3a6c1e6dc0fc781e1c021ecdd", + "ProofOfPossession": "b48d271ef1d3946f8aa2cf98dcd56d5c70f33fe11c71d4892e0020b16897a318b9515a4e700e3a987582aa38f2b730bb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 113 + }, + { + "PubKey": "90789aee575437e59ee0c9c524033c1c38dcd233efbc063d6551dc6f5fedb1adf6f18d3030e12e220f29f172e9f237b7059754273cb36e72d140263309c7eaf70d80056244cdaf1067492e0cecf90d2475da8ea9f3a17b5073acce8513acd4e6", + "ProofOfPossession": "a15aee0e6c034ac538701e68ea42add565938bbeff2eccbd84d5e7d9478211125b4b9ecb59597730b59c6a4c5dd2065b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 114 + }, + { + "PubKey": "8219d23353a3a271a7df06e9ebfa41d8bfc9a8409af5adc07fbc38c94390226cfbe1b5e67fff60ce19c247b40e80754e08ace2b4848588db851cf4a039593e33be1978d727a3e6e894fb76cf98a65c45b5350ae99827e14a05e9e4bd1f4f8db4", + "ProofOfPossession": "8dd80d2546c72387a79855ebbf31c1a7c95afb0358f8a44fef851ad8dca6523e529c36f280c18848da0ba4d869493dbb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 115 + }, + { + "PubKey": "8ab7d81e50c4bfa2af539ee49abdbf981e686d81d3e62fd031d54e345d77d0250129e187449b2d438e2946b6332ddce91059bf615062bd9b25cd4bd163c69200b17fdcb6bf5a4ee20c4338ce1b9c131ec953d367591c23cf21aef620e57b2f6b", + "ProofOfPossession": "96c8af6033491d7ef9963eb49bbf9e4f3a5927165fea8d690aacd823b7962914f3ac4709c7c01b513b4be56d4a217f98", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 116 + }, + { + "PubKey": "a7400a22cfd1fdc646fb08e9fddc513d7be12096af52adec494eca5638e99c3c45ccbb3b96ab868df883909752d0bf120812365fbfdb56d3d2b47ae8047f0d28929ce879301509fe2618873ca3f4f1513e0490a2d7ed00af8c463bf1e0e49665", + "ProofOfPossession": "8217c92dab05500d05224433dfbe02be0f7377defd8e60f448f8b0e990d995e0742d8d30a213e81d39c9d9776b2d8efe", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 117 + }, + { + "PubKey": "909a78cf331a098f1a29691883e4e5b727f759d53369137d3291fdb56b105b4eac479418758ffce64cb795bd49a3339a18e470ae5aaad60bcf7fe9a610f72c7a7015fb786d6e43bbe793a0635d99a0cbc2f79166f206ebf531cfcc8c0c72da3d", + "ProofOfPossession": "ab29ef115577fb8355622b596f0dd354c2ab1b10cc3d016399e581103fdac034c1ec1d1ed4cf81aac9a33508f166e88f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 118 + }, + { + "PubKey": "95eba5f8e3c19adab64968d6af8c5f2ca13315a58813b14c76c2eaafb5cd651585f6cd6464bd7750c8ff6f3cd5e7161f17353bcc5234062d943dee0bcaffb164d1b55f3b06e62632d9b56f97ffc23bad92999c3f519d71654d899ba1f5fe6ba0", + "ProofOfPossession": "b68f993fc12250f12eef2fc331e71c65c76883f930dca2064445f176f5ad8b2cfc984b2a0da2da2725480983eab4e0c4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 119 + }, + { + "PubKey": "b9fad1960b18206e175e7667b7ee0184fb2b0013be168f34b6da5b56e61da341072477c5516d36aa9177ac4d22c624a503a692c0764c380960197e46235efe22bbca8c059a5b36d2b9ef91fc6d7bb177827733ce3974a711d489e9ec4752de47", + "ProofOfPossession": "b5b0a5f435d386e847f9576998a21627a77af346befbc647af0612fc2a855079c908f4cac66c4969350f219c2d778154", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 120 + }, + { + "PubKey": "a0fd76f7ab67cdec4b59eb0562372bb699aa746dcf6bd1e6fd14df33fd6f539efaca7eeb0df4a6ff1bffb88ae0882eb714f79f14018971d5f700e3f5d1cd2cb33d460ab756496b8d0e8de67d6b1ecc46574be8262b037623cf8844e65a410242", + "ProofOfPossession": "b8b0a785ca7472fa3aca15baa75c37f3484899b901a73c81f02fb8c491edf39a8292684227ab39350b6087b8ce7d9785", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 121 + }, + { + "PubKey": "a84ef2bb0dfb6731af4c63171faaf1fe18752875dc6d5e4daa2b5fafcff1cb8f55ea11ca915771167e31ef3a4743e684153b40c6416db8ce6f3a75715fcbec420e31549758e12f79de161463c6c6d682381c4d2802cb879803bceaace158c933", + "ProofOfPossession": "95364d2aa8ea666622db770160d24e5df8e3944785a05f9f90514ea117b7200f412b43d3533c820486799c839d0ca3e1", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 122 + }, + { + "PubKey": "a84f8d47a0e1f4680963d0432b6ec744a3719f534f5051cb16994373e932f01ac3cc9162c6cd55e15e8d6f865e6674ad0270ac1d65212ec25853c273376270bbd63e76bb324a0e311431c9a4d60e374b6eab8e1ac5ce1956038146668f6b75fd", + "ProofOfPossession": "a9cd4853729d1f2d15eb5d3a62fe4920634fb94100c555925da80194d802a5161246e41c3f7a0d1371bad83d4e52411b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 123 + }, + { + "PubKey": "9069bd15349027a60441cf44d8e4c4d3c53941c64393c1b2d14bba7e96a218f336210a4a95236bc16414a88dbb58737d035adf6056042c6cd0bf321dbda0aee2268e70c6d6f9c6112dd393bec36705d9a7643c41286286d5898908c0c8150011", + "ProofOfPossession": "b67504f36d4c4f0e8589802a259817904ffeac2122bb3022d4eb4ced6a2191d54882328c018b3cb33ebf6e24fd6cb1e0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 124 + }, + { + "PubKey": "8f36bf3608489fa1340a7b38ee6bb8b988ad7fd9378f300cca3ac3446cdeea6875fd703bb2fdd141526f783b0c012d2d0cc0aed9f92bb18eacead0a7232a1108c79a0e70d71f36b676e92cab2019dd9cff27e568bcbb94552223186a419cf258", + "ProofOfPossession": "b452ab29aedadd1323b3fb03886fd49a80422fbb8964dd5a3308dc20c5e974d52fde06b8bf5e0fd2b2a4622960a9d5d2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 125 + }, + { + "PubKey": "a326fcfd19fb744816e8a9c779a63698b6451ba76e64f3c3a43cfb0634e38d569d5e7539ef1b8d80438b895dc0e52b610e0009faa40ce21e229160c27d23a8fd0691cea677031cbbfa8d0d559934f13787836d53117fd4d5db5da6adb3ad380f", + "ProofOfPossession": "8fac007e8d778e28fd2c64f2722f25ee99fab2689029067509228beb636a211dd4050679300f0bf228691076cc3a97ac", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 126 + }, + { + "PubKey": "a93a773bcb23d7a919d2b6944bcc296f333ca638c7f14c25857aabdc480117c54b3f2a4ca5db704d8c2ae8048d044ebf09227f5e3f3037e106a66fa54d18009868e7d28ee09765051e49c2e3b433cde5635e8576ab7afa050e2bcc2f1b19aace", + "ProofOfPossession": "ae9529a27ecb1de7643de2f51758191ddb79593bcbee88fd1b7f0b7a6a5d4e9e4dc7e09b00cae51a07b1c09f28de4782", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 127 + }, + { + "PubKey": "90485827bcb86895d0a0fc8b455169ad3efb5993fda004acbc16fbe33cb1684a23e534635b47f8c75380c4b6ee1ea1b4147f02ff53b1925e68dfa3481535c47f1122534ab971cac09f26228a07fd13d5d4be69c971de0afcaa63f19ba8eddd8f", + "ProofOfPossession": "997b333e8d59705177459cc149d5bb442069eb55edbd3bcbe3172edbbb60e9c23cb622c0f0e42b8e046dbf575ae21daa", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 128 + }, + { + "PubKey": "8bb0831e613c13e6072b53e9436c2f9045781b0546e5720cdf39276d22b4ee4f87f1c6e4980b42eb8d373fdce095805600c7abb902e6837f431e0d7823d66f4bdb9b50c534c3ea914acaaff03952dbe99b3803e1aef499b79c4e3a002929b930", + "ProofOfPossession": "92786bbc51922befedb52d2ce0e0bf6908a8a9e2337fdf9760367f767d7bc2fa178a37acfedfa5afc809f2225f571d34", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 129 + }, + { + "PubKey": "9788d44a313888cb4e4b8bb96cf4cb4fc294fcd4b1b68e1e830a30d9a4ab92b591a31f99aa51443389d5cd0b5e56938a0ddc940b6b2293fa5bee7a4e87435fd44006a7e6c94fa0effc90b44244877e5a1679e28dc6378ee8ed2c070072edc730", + "ProofOfPossession": "8921beeb814832a343b561395b144f4f7deab4369adf79015aa2142aa1e390afda5c6b6d285054317de2c25cb575ab3d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 130 + }, + { + "PubKey": "9302df4514949dc8970beda5c4a6375dc1a1fc79c4894b2848b2a4acb870486432f648e803b78f69d6bed714016745ca18a273b0208ef0decb70788969aba516fa2dfb6a5fee63394a6129701694770a5d275aef73689de9e0f102cd374ace80", + "ProofOfPossession": "ab728e64b67a6f042c0fa4b21807d420be3f40ce90dcb5234b3b3c117547125d32b8aa002ae9cf76c0853252392e3e23", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 131 + }, + { + "PubKey": "b3b9a3b5d2b58596690a9138c65b6bc801e4384ba537ba03f5913066e8c58be0a265841f35a35ac2672bb7ef052c92d20af1d82bc8f634fddd7032b7023a86874c3c39828b7d66e5664c1d84464f6b4fd2a640aa0b7461a89662f90746c1cffd", + "ProofOfPossession": "98e066ff3127ea2cce89d26430f13ac5ce372e6ebb0236bfec792de56a786d9dd53240b7a5aad92401da1bc1201730ef", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 132 + }, + { + "PubKey": "afd9fe61666d21187fca69826bb460605928a6c711cbe840c2307a79403894ad1dc7fd6c983fe99c40887792450ab80801b53b61fddfff3267c4ae24164c6a990d4d9864008dea328beabb2c758cf39e514205ef55a73a447853944e657db638", + "ProofOfPossession": "91fd6ae14a34e79603c38db613fb83e265ccc499a4ebc9aa616422ce66a4cceeaa1896711b3505ae52aee2e617b8c6db", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 133 + }, + { + "PubKey": "b7c1b8337a24ec6a6b5e34117388b2ec658f24607db4a9de5a919311d1aa924f2b6b5e61fd1d94dd0a9101abc2b54b930f237930cb47f1699cd9df343137fdd20a6815dbf2f1a44f5f21899c9659c525f00445630aeab5f8827af9205341804e", + "ProofOfPossession": "987290bd09f0996a338ec00e27b7a08e6e5f566081bfe90555dece8734e732bbc7f6fe182ac86b159763976aa81eae53", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 134 + }, + { + "PubKey": "8d751aabff3ceeb76f07c88c6a49a72c276a7d7ec9eee1089a810ba35dffe96b94ac9623a339118462adbfb9ee53b984184d027bd090b970680488cb43fe3154c7627b25ee78004222c3402a7f991d77286933cc0f28fd86671b67c10d09f0d4", + "ProofOfPossession": "91348a55d8f9fe25a173830808b28e643f54d4d82b43290b9e03673626491ca3c8317887b7d799065220592ed19e946c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 135 + }, + { + "PubKey": "b97d842a205c8e26cd4aa140243a5fdd9422583943a7d4dd8d90cc9bb0d401a96be047301e512eb707c139169fde265108f8cbcdb82e7ad4cd4b788553b21345ee556e9b6377dbdcc6e6400697af63c372f516f342fe44fe4d3e9225f483a5ab", + "ProofOfPossession": "a93f0bab6bebe584e43dbb765a40f4b2820531173733687c532074b6e4db395e210707d4061baec216383bd15e099b39", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 136 + }, + { + "PubKey": "a76d3c10997ca7ecde6e4470554efeba45e453acf5abaa79216c3c531e68dfcae217a15bacbdecef46549d93b0b307720e61368b9362d55301d1b584ba8352fba06fdae9c2e487cb639645323206713a810d8b9fbe34e64516b11dcf1e9126a8", + "ProofOfPossession": "802815962fd21efb846eda013cf44ca14b072af080cce715eda753041ff60611f00915df2b03745db34ac40f02817d2e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 137 + }, + { + "PubKey": "848494cb12f9becb3f8a5a97e107ce37d69304a07b6c848d7d84f87f4d1a03114e038a127ec32666a8beedecdeb9138f17935be605962c23df6fafe4a89dfa1d3fa7a5f2f764953f97c23cf07708aa365148c89dbbdd3210cf3df8a8f01e94bd", + "ProofOfPossession": "90183f3391ee64410c387968058d0714777aca2f5136774319abfaf66266e64476da1840e45088b8fe157603a62e3b79", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 138 + }, + { + "PubKey": "a60b4baeed220c73877b05e63767fc38ab49bde98d11ededda31c545964191ae360de199d06d993b9b236a4ca75b8a840a65ecb049b82c92256a9b321af59306230043aba44fbe45346bef5346f62a1563c36a981f0143510c6e91cee026204d", + "ProofOfPossession": "86772d4adf94735c4b9e13fce1b8bf0cbe53c13cf963f63a7eaba2ec4d16457063a622c49b91c4cf1453314908b0fc92", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 139 + }, + { + "PubKey": "969a8f41165b6c771091c3e6fe59fa119a1c2f4fbc13d2515ad96c5814cc8281974a79b70bf36345e12207599c062c2b0a94b1e040c02e4f13e9d8f137e9d0ca0feff06c075623af0deb470013394a03d79c34e9892ee2df4ede0efbd9553de4", + "ProofOfPossession": "8b4d95e12d3e36b915ed7d50fd459d1ace4b7cd47bcf1b5f26ad2502a850af9ba85b5279ee81466dbf6887e85eed668a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 140 + }, + { + "PubKey": "901bd4bc01a2bfa691c1c8cd0a301482dc1ec19293fba04a41df29a66721a2ef3d178097c77ead0a4329ac886641397b099650b2d27d05a3ba8e559bb5268f472898baec1a13164c69299176e40abba3f09b13deb9a62935a54640b7885d6549", + "ProofOfPossession": "a9123a0fb9adf5c1d02c318554a0620ccd95b9d339ce169fd5593082a7e8a2cd4cf9e9195c51f4be57e461994b26c8ca", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 141 + }, + { + "PubKey": "8970d4059fee285ce16ad920379f447fbf44db158826e269b219d7fe43c5af7b86cf4f06f1cfb0fbcac2da56e4f130780c18df7004544a620c2f48d740b71a77ef9bf9f94b78082c7684839e517aa63a1326dc5845588fb5996c1b2397d79126", + "ProofOfPossession": "8f672c71cb7054a6f49e5306f978d1b0f666806010076f840a0c7297c6e40eb4748d5bf530bf9dda801b31a455d41db7", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 142 + }, + { + "PubKey": "b2142de085c576bb86d127c542cbb0d741437d4163ae8e5cab357ee5645bc3fe272cd863a5147906beab7691cc13337814657e770a08fd03d4eebe989f5c1eb441ca9cfa3d6a6814ef3cc099f42995beaaa428ea0b354ef2d4d4033e5125365f", + "ProofOfPossession": "8abefbfd204bf50884097294ae5b6cfe247f4de7d97571a35ecee5945bd6de252cb007b93a6b47d607642e3b61c5447a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 143 + }, + { + "PubKey": "b52e3324597244b516231cff0a627b628b662b0c3ed106127bfb3d35e5d8d137f10e1e5a38d750cff71cf8880fc9013915ebc635b676d7a072014c2b38e94692927359c593053ceaaf77581b3d5db2746ee85b2b0840dfee84ba219b858285b1", + "ProofOfPossession": "82aa5b1ee217b1faa0becd3b6e5218e5bca450a9e2b02afabe6418b33ab26fc170ef84a3a17f148c2dfad85269f7bc41", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 144 + }, + { + "PubKey": "ae40278779911c19027369f727d6bde4810e681c8c982f2149acae5dbd427f9c72d2792069064b8655167510c4d58cad131e1f5e4592b5660fbb1a0fbf29108adb009d5cfe3b5db4a99e9a383a1a7ff9c3e0dbccaaccbef2147f454f08d2bd8a", + "ProofOfPossession": "99cd90e05a78747c441239ccda134f0dfd2c819236de26f5e8abd83b184775a8ae768a9c972569a0101317754086f6dd", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 145 + }, + { + "PubKey": "b15a178902dd77ae87b6a32f8edf8db54963fc43e44fe7f1b05b2955d74e025ad135e4690b4867b8eb509d37956241c1093c7e80df97d16fa32f020ed79645a82f04e931932c50aff0b3e0e6adb8d56dc2d1a31f3d331886f6f9a7fe1e84e25c", + "ProofOfPossession": "86ccf1ea1b350a9b322572895253af18687639365047a6a944084e9b6496665a783032d945164446f509d74d0c24f07d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 146 + }, + { + "PubKey": "8e7bd3e51afc04f42ff02b16231b635ccdfa845d0e0baddf12895ce0020343ca10164ff799f8e72c52467de81b36251f102c062079f29dabb09756dfe4192b09bb7dc4921b72baea2988fd67fb832cc8116cd7dac6f64263db0030b538c0a482", + "ProofOfPossession": "a9e2de0427eaa2b0d9f23802537591a62ae54adfb80df535af6137429d494299636d0d33397c64810475a0f92f091c4f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 147 + }, + { + "PubKey": "a60d88206bc347dcd4f54f10892751b01ddbd5a76985a42a3bbdcb10092b41da05c7139bf84d0104ac7bee7273681430145efb07a15e4dbafad6998b9299863ed2d59ddca997681512241f23117bc9f966e79081e10368f1c029e418f4866578", + "ProofOfPossession": "a2ecbb4826a689047fdf7512c3e36c35d5fa2d7f1ac17d73b396b23d035ded36bf66bdc18d610d11b99822198bd4fb55", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 148 + }, + { + "PubKey": "80732f4f57920b166ddb9347652b90a98d31e31d37c78848429821cb4d3035c3a3864d5477a64f78026d0086d1f499150c8dd661215193fce3e6fc881dc715451de4a27b3b5ccba38d7d9191f8347743a0266ddf42a788b709510a6506fdbc7e", + "ProofOfPossession": "81aea4a892afe9b6e21ce854944d7db755cb35ed19d5295f2495c72bfb38bf45fc0f58cebfcd505fec1fa6b081bcea51", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 149 + }, + { + "PubKey": "b14d69656677941ec036781d6a713e42ddcc0ba6f306e4f6432b8db9fdc11841268ca8434cf89bd6a2358d4daeccbcd500164fcda52b48be94e499098acd2cdeff008c22c1d3d35dc30f26ab649a6aa22e8f471f3f8c39f148fb33900a6f5ea0", + "ProofOfPossession": "998c14ae2a5788fd0efd5cb8943f53c1dff6b4c810173a443c56b8b65548bc2cfecc139a443450fecc8581da684478c9", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 150 + }, + { + "PubKey": "a2db94d00f83f10647b374006acb3892c881e0f7a546f7df272480f6d8824b915173da24077ba56ee2d245a5c778601d07e2e0126ccf6d997aa76066c76221b4ca64850dc899babc5c9e2490bd4be732b443741b07d8417aa039668eaf3a0c08", + "ProofOfPossession": "a6734cbe6efa46adc1cfded36f91f3ee0de533160cea67de725b50335338234250cc8b61bb2d7691abf93b0195f926d5", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 151 + }, + { + "PubKey": "8ac8b149d09f3608167e0f216d25f4b0ed1c0472917f23757e4f999ad30f1aa1ba00dcc9c5185ac8b8cf918755a5c6e101b7e5dc0ceda124a438ed301f6fd571bf2abbf248a7ba4076651ab3c3fb3b5bf1b348b08ad8dd0536578385a423f605", + "ProofOfPossession": "97246ac2883d76864bb28a07486043aca3220b09f2215ec5f49e9a3e334c7524de3c8e20e13a08e4facd3c03bb11631e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 152 + }, + { + "PubKey": "82bce70b7e72f22ce05fcec6dbf00d74a130db83ff2a3b9649a072ff69ea32a6f34b52ffe4e5a26fc1fb6887f789cd13183c1ddaf0d25bcd186695f0c96020f5c263a06d72d35f266f1183c02661ea57c79f0e51228a1eb51e7ca3db962812b7", + "ProofOfPossession": "866a1d9d240fea3f9e94bf0d37fb1f2fc10fed73a43bd13029f0692ffb8e3fc188159766cbc1eef8f6c9cc0d67bbda37", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 153 + }, + { + "PubKey": "a082fa04e73f6b348df86686342d494e79a5d498710187714987160088e86927685b25d0fedf5835229a9af6a3be860d04decb34b7a82ad4185f58930dbb25691689a9c95a169d10ec5291adaeac2a93a2a784c44a3d6be6c617504d5af86c8e", + "ProofOfPossession": "ac5199208ad3b39d2980f7b3f205d951e28da589fcdf689d1f62649ec92d3a9240389fb32a384715b9902792c7d78b2b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 154 + }, + { + "PubKey": "a12b6beb78daae75cca52124fd44c174a2a8f1a91a4d91edfd10bccff2547bdf4cfc5d96e25c2dc38f0056ea6c198611101009901210e48feab371ec37921a716b5d16347d0c095cdf594a3ecf1e93712ba42980444b52858cf24c9c8b08444d", + "ProofOfPossession": "b5fe7588da8c06aac90a1ee32612bbdc8ddba747c7471c0c020bef04e4dfa9d7697347efd66099dc429feffea6206045", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 155 + }, + { + "PubKey": "a12b329e4834d5c2b917c7e052fad0c1ad8ad7ac1feea0342ed9e5d5b58ecc54f4765a10cb341680898b5060e5cb0c0e18d3cf4d6bf478dcbd1f14bc3d383aadb8e5c673fa407b27ced02500ccdacca873a350a0e207910435bf80180df6c273", + "ProofOfPossession": "8c364ab08a0fe5683e6f583960cd83f772f5165f3c4d844eddf4ccab89ff5201af00f3fecb305dec651763acd1d69026", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 156 + }, + { + "PubKey": "a5f5363674eeaa5c898bb1db7f19cdda08fb43e8b2c617b17a981571b034d76d019f6e8d30533de1fa805385664f35b807bb581754b2bd75a5f13ab154b73e373dec80443191c254fe12b091de650d37c997e1a310ebea3e114e61d74f498a38", + "ProofOfPossession": "a97a5e61fbe188f65933bb8a63537c2e55b3c85fec76579a82eb720099426173b45f7e286e271baf834f1ae5a2e4124d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 157 + }, + { + "PubKey": "8c032ba1728daa76f1a71b2f5d4175452f205d5ae67c9ce2c96b7aefadee9876083662bf18fa12569d4b1596494438b70a1bc24fbe652a0671cfceff2cfb72cfc9dd06372feff46b5ebc934e0aee35fa5e906fb6156e17664669c0ad07c9600c", + "ProofOfPossession": "a2e835cf615a2863f2312ef31196d68e488bd773a19a7d6579f4f0a495358069759c5313ebf26ae7e866d9bd5ce6fbe4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 158 + }, + { + "PubKey": "80344fb28308996f047aa41ce4085294112bbf110fbc95dd238f3daa888dad4ed6d551e25abd958c46253d39cdb8e6551400371d7e09411753b6383a3c9fdf715147f032292fa54c3d40268a2b50c484b48ced545d6bb896326a62b26f7b3604", + "ProofOfPossession": "89e9048b6a2f7c1f3d8b6211d5268d7ac16a5ff2c99ff42126bc836a3b19c4498e40faf6fbcb0ececf1f083e893f8c7e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 159 + }, + { + "PubKey": "8e220e079f28fdddf4cf4f7ff7d6d43091fbdfbae42357a232cee543a755e8819034998be63d59bbd0539ec75327f1ef0aad395bcf63b2976a3195fc49b2b435d88b4aac0da43e1d79c128eef86e860ffbbc014e10c6d74bdff77f2de76ec300", + "ProofOfPossession": "ac18bdb065698f168b07694379e99176013f699d7b90d59f065570604a7bc4e738ae096f0ab18e579d4724e3b96dc2da", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 160 + }, + { + "PubKey": "99944552ecc26896421525f4452d016ebed4bd6ae7ae2b77eea123aefa44865e1dda54a3e1f46a8784d1024f8a7f004f0d232d9957f381734af8557c563707f9a94b03025e18471809e9875d2ea7e537803e9ce85bdca21ae71c1a8d4c3245e3", + "ProofOfPossession": "987fc3df73028f17c7a68993259ec1331d0264132dde81f62bd9dd7267843bce55705a6ceb53270d12b9369912d6e58b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 161 + }, + { + "PubKey": "9825e87cad5a943065b8f2629657e8b1245e632cd17fd08bb89f61f2612a43db07ab796cf9661b0d3649cb04f0712a3207001b98c4eeef4e312ae58fb5424bb105cf84c2c620fd72c25eb12513e937f7d21ed413e08734732e6c9b1cf9a363ef", + "ProofOfPossession": "ad15f5be95a99122dccead67a9ca5edc60f2547e3239f3620753e398945a976009d121dd3fbda73e5c0623878e158230", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 162 + }, + { + "PubKey": "91588dc53860b89a34d0ab3ef79c10ecdbe26ac892d439eee62bd17a10706309ae101afaa030c96df84d2b6ea782785600e14e60637dc07dd53bff52944feceb082927c742e4202f89e4ef624e4314ce3fb251b2be07577073d03d69538f3d78", + "ProofOfPossession": "b523fd6cbf8e3b051b913223c84941ad138926156a22960ec7d33f652937d0887731aa819a7cf9e95daa746f673e30fe", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 163 + }, + { + "PubKey": "8326d516e4d63e9f70a304f53c1eae159c89f4aa1c14bf825fb593db7e141df6d4988a821cb6c9be72fd95d9403654d1122840e5507b09e6a2a154537b1af4cd2312edd1c947c0b6f0f5152e7ff58c654ffa949881a9404c422bd6ce62bea62d", + "ProofOfPossession": "933bcf14955e56938c1e1b25796f30a6efa9efcbf51ce5371b4b8959e594a5de364e9be5dd6712a9df452a0b7fd35961", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 164 + }, + { + "PubKey": "ad4d20abe2ca5b198fecc2f6d79330d7ffb419a4aad0c21c1cb2594ee80af35f22c63a7c526b4feccfa2522d33c413a106461423cff71ac7507b5b2d21f6a0f72f36ac86d7c38b58d1c68adaa47e1e4cd57839ffe0e77d1497fede897729ffe1", + "ProofOfPossession": "8d7a2c485c8cad570adcbdca7c6bea2c8898bdbc37d441618e76d97671ae288dbe45defbf481e99faad184172a0c81e2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 165 + }, + { + "PubKey": "b3c2afb758db3fee40f65218ed85b60eb20f6bd776ad9d100e58ca674222ce1319505db37c6bd2078a818ac2761323520d9161e2d3479fc73a856b141a5f2e851a8bfc7dc6872ef70acc424e1064340fd873abbbefdabd4eb03e3e93b79ca691", + "ProofOfPossession": "a26f81772a6a54a3517d8f6d9588b24a3d1bb0425db03e18e53d2e08027b533585b2b50144fc55c30622b726a75b8c0e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 166 + }, + { + "PubKey": "a2034821a70be3faf9d74df831ec0f9010256dbfecec689fd726f539e68ce28d29c8acf05af0ffe5f31a13622e72585507b23d6aabe03c9432a5bb6553fc9b375e53d07b83da468d9d56733727c23e557e2f672d0bb2d23dc49e2e78c8acddb5", + "ProofOfPossession": "8dad67f13485dc13f3d387050441c36929fdea7a0382703f0385b5fe98e8024d8ae8eccdc307f3023b99d827c83d4a4d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 167 + }, + { + "PubKey": "91c76f0d3ab7f6143211d96d087378b30b517a2b55a57247219585c7d27d590ec2878b57464cd8f578ccadeee87d33fb0c7541e6f76444d11ea242e0128d3c78f5ff7d69b3e6504033e0982cab34426712ba1ff8a217cf2dd225dcfb3f0083b7", + "ProofOfPossession": "966e9c23a96d280df8eaa50ad1c9761601b333f1b3b26a84b0fb0c3f2315f03b3d5fcfaf8bea4cea64e82e9eecc7c2b8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 168 + }, + { + "PubKey": "97f85fb70103189d843bfbe3433239d3b68c5939d8ab44c65a66a94b09f8a74c4695ad683ef50c33c39c85ce15572f5e1658f70b05d53bd77e83b237a1ab61a469312ffd898a9ba45c52ff6daacd0e09ea8326d08d77f82869abc977b2f2c910", + "ProofOfPossession": "8f1c7bb3a1075ac4d1a6be5e9508421aff91c68129e23ba5111d92ca6527a1d161d0bc9d77ca5cdd7706ab8ae753fe53", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 169 + }, + { + "PubKey": "b12e35a11c3366119ba6773c5cee54c41b2cffff9ad697078b62d42f5d39d17bb8be28b1c7486a2695b62cb79880146f054c460a711f1999381fd0218280738db077c27f4e046b6694eaf51860b82b9ef9b65c32b1fb3f272434d6cb1e593cfd", + "ProofOfPossession": "a1aade06a5b41f2a3fb5e5aa99ab29be00eee274dead4f97c818cae12398168860d1d6b87713108ee5fd766054655cc8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 170 + }, + { + "PubKey": "a701caf53ed5651c0922ba0e9c06d916e0b3bdbadaf6907db4663438016d532021854b20f612cccefed28b043e221f7004dd25f223b049bec2dadc470959aebfd43474733db9435bb180ecbd5de96c0b8c2fd755d5e80a16d183a9f54b605369", + "ProofOfPossession": "936a15c5d10ccd524f39abaf53592418ed0bde978449b3a2dd76cbff0b71612af182341ca11bbb6882316f6a51b7964d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 171 + }, + { + "PubKey": "a806b4404c4a4a99a90d274ed2b4536b45b1b8239560f9d4a58c6548db3649fc96f4a90001aa5f85ec455c80f4e9c18913078a7fe7c1113f7a2e4300aaafca09d07623fb476a22dc3a8541341e1b4b572da6e8a341a48f3cb44e4af2cb4eb109", + "ProofOfPossession": "b964bacfe0b88cbe8ae136900153c0cdcb4fa805066009776c2e8e00f5e4113077c0a6f6b52cdb2b1674400e0cf4d9f7", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 172 + }, + { + "PubKey": "a68afe6b6beee54cd8ba3401f4e58a0d821a9fd36bd5da881d4ac6cebf547456c9a1aef0456a2ac73152d77b8594ac3e16aed4569d94dd70bb2bf08cab0960209c6f66037713d072fec8345e6b324685ce896b68196c496fc182067bf4dbe8ce", + "ProofOfPossession": "a87a9585796ffdec7dca7eadcf15074695398d9dae726c9e14f0644531d83fa1a1d60d360a56f18ee06cbfa67df448a8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 173 + }, + { + "PubKey": "8bcf066c7514a91c3622b53d2a77c491757a6ec066106004eb30ce9202827e445ff440216041f551ed75c48dd9961c990a3c4aafd3b04ec10eb68c6d66045bc3ed7f1a36cf97b737cb0439112d3d72511cdaf00b73f1db466ab2043b85be2f74", + "ProofOfPossession": "b85b3737e44a148237b4a24b935d84a64e82c0ff22659fecb706b0d680fdeddbb6f029627a03b1f1ed380c0d0119ed44", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 174 + }, + { + "PubKey": "a7140eb969a1b18e81741976e7b3517768745e50f650cc86fbf8fd888afd9a1ee614bcda040386029af1be174647d8b70684970647c9e832fb2b266f02f669d10d0bf0226a4e9f18860d1b2ebb88eb984c767c82d438cc63dda7ae086593d0ff", + "ProofOfPossession": "a6c9751acb864ac4c7b2c2d2f81de138c6dfc11194ddc85f53259b36d9ca1d35538054cc95024dce8d1da946fc2ef2b4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 175 + }, + { + "PubKey": "a128cc053796e5fc5fddbb2b34e84e487f9bbf6ea3c757af4c3dfb17f81232f0c547bb7d373b29070665ee7467b1a5e205fd8fed56917b3d64ccf1aa0e63fef505eb43ad0b46f6408a3ac671ae890e3732b9338b3df184d2a74a395755553983", + "ProofOfPossession": "8d8379bc7921eb20048094d91b1559d648352b0957740320778ac2ffd2311cb78cdbfa7311de6ed029c4bf70276f7829", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 176 + }, + { + "PubKey": "85f4ef0310e2019fc0a90e223ab9e12b78e1c491d9ae01f2fb6fa05b039182a52b1a36fe050a0eca4ba91e3a554503b31758d3d9a6fc3ccf40562d8a08fa4539962f82c1ed8cc6087224dd39ca8b8035ff7c40f353d7061daacfac2ac3f38c6f", + "ProofOfPossession": "ae2bb72620103c368a39a529ce48e597d213f420627a883580e4fd04798fa542ac63d21ad7d8e6c8f4baab5b4fd7738d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 177 + }, + { + "PubKey": "b9c4089eff4126d40d65baf9b76e9ce8e01c475dbe9deae72e549015ef4b1d724d7f19ac904195fe6ce91d437953dddb0ad94b25e727551d77886a002f4541161cff26eace8a0ec693d06689031685eaf6f7a73f370410830a37c29a4d678b14", + "ProofOfPossession": "8a3d34cce76062bd4066b9f9b4723c7ec3a97137731efd30d454a76ef46aec1ea22290a57bbd5ed6b2b600324b093bd9", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 178 + }, + { + "PubKey": "8b52c1aaa57d1309b8b83cdcc6d4a96b105eda37a1aee51f2088c0c8a4387ad4cf9e2ff7a59dfba3619bf9a0e3c74e38017c829ac092edfbbe8dddc2171ffc47310297a8fbe8c3b777368d6804690c50e3b78cf0f973d2f2ab8873780ef28658", + "ProofOfPossession": "939fd1bd541c5d8ff3a1d3dfcf6c8ca2018c43b504861332d84d3dd54dc6e33237b94036cff6034f40218ca1af1e33bb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 179 + }, + { + "PubKey": "8dab360c7240b047ce7c46c337f73c7c909096a7320b04b5eb8d966f40492095a286eb19b524edfaa69d4a62952438fa0b017e690c832dff4b39f404efb7d2cf0bef71333e4492e4fb3ff436c67d2edacd0069305097957cc56c670b1c512c27", + "ProofOfPossession": "89b928992bf8054a2b15a2bd99b891b0c654dfb2bbce7cb558b57108f8947a6a7a5ca6c5eef05089105552b51f4d3fce", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 180 + }, + { + "PubKey": "86fa6d0cf4621e24c30218f843d443667ba1d6b693d52247f8b0027c0d4cfd3986d049bd2c94ae67f93c6baadff0f36100ccb3e117d1484467e0a877beee1a4ea972962163c5e3ff2d724d9f96b109050a38dc3c3621bafee6d1300398f5cba8", + "ProofOfPossession": "8db50f93e20364182df9fff6ae2e1696c6deb4d0ca6435440f97288288b0f5b85d2b942580b545753df899aae8d683d6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 181 + }, + { + "PubKey": "a4e90c5555b0f5f4cc85f4032b36faca1b43cf8b727f5c12ca281c34a0f5dcff4b9748e55c47261825dc86c96af99dd109e115cded89c4031d44c1f134c25ee6cc2495a904fea5e3cbdcf831f007013409ebd91567445028968110d072ca2f30", + "ProofOfPossession": "97f44fc60404ca8c4f953959e7ccd28318eb0bb9f4dea716a5028cdcc7d679f481641564bc8745456babf752e063c783", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 182 + }, + { + "PubKey": "b4805e22cdef29c900bad2b1b6a098c6d571245d84fccc1731609a41fedc0c81889fa9dbea1f1da4703d4d3abbacaf9a085dd14b9417bda5cc7d1c25e887ba3adcc4c6d5ba4c723755d56460f6111d936973c5e438ae11de7dc8a073995c76d5", + "ProofOfPossession": "a5fa429a2fa390a36690a66cea19b96897ea9887f433f17e548a8c5d132a6652224ebc0e0c20bd812444ae233004abd6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 183 + }, + { + "PubKey": "a144a39ae3eeeb5ac3b19db6f4d5f1933c5048754b30067c28240d5b9ef8d6f27f955e6c3700eb3b01b6b617ad9859df0c7e3972e3fbf4fb380404ec657dd9821c28019ec7a7e82cfd0a9915b0029e7d67fe64dbc2d34f4658bd7194aca7bea3", + "ProofOfPossession": "801cc2dd2a3bc48389fb615533a865724f19103bbaac863c3d30b1888244b2dcf7d775970223bb92803b6d52b05454ed", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 184 + }, + { + "PubKey": "9273698352df71ad71bacc5dbf461bfe6067d89928efd918b82e439612c09080a7b332cb20fa96a4ae7c339d3f86028b150a811808c793d5007379ee42662931220734bd9d3955b188a3894514c7b065c294954ca85d58714ebf83bef1eba72d", + "ProofOfPossession": "b6b57889062e3655f5e9860e97c73651b1b7e3807d641830fe1bbef9bc15e8f797df4805b3180a0c6782a023523bfc2a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 185 + }, + { + "PubKey": "a21e1f0a2fc66fff01e5ff9f1479b726b48be9529506f09ce6c1e05f5a9077e2a2f3f7f4d12b48883a6ebe23284281b10d2bdf923316c674f34800f94442b8ab342fcd97a06ddd0a8c8e0ce3ba4f34292330c7f81256cdcc3b7a01a06af7040a", + "ProofOfPossession": "a74c0725ecd702d8c4795abc4d81d3e7b299731c26312b363323d91a2a18e28ba91a9b5cff5db3519c6f0fe9b2c62397", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 186 + }, + { + "PubKey": "ae6766063c95312a9c38f7a93887ac2c4b47b004f963e04b38335a0e8946b541d2d722f16fadd1951d0bc2c35b986d8207cd17a876d42ddc0d1d512116abc90740aa679814bc9ee4b5cd9b343921a1ade6466a9bf97dcc13c250008caf178cfb", + "ProofOfPossession": "ab16679097538605c009d974891e28607b1fe589f979342cd789642b7ff073485766b66f7154e40cf451db76b0792478", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 187 + }, + { + "PubKey": "983c9e2403338d06178d5563b26e631486ed7cde3142a8ed6c827cbb2a50027fe34397ab8eaf6982491f0476c90a9dca05ba6fe000f7b17736dfa8e24a45770fda33f5d77a2e0faef801e0963f4583aae0b8e237382b7eee6e52be7288dbfd8a", + "ProofOfPossession": "8e7283d2170201423f1216e55c63e6215ff8367d0c0725d28a6eb291e01f05e98493513c1dd8cec65a3573a0f01eed04", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 188 + }, + { + "PubKey": "a33eb80eb15cb11475290145ce1ec2cd02e3b5babd32cd26042a71ac35dbd781577cf03d0376c767d7e59c6939d0cc4e1250e8e6d9831947b9a395ccc35db28ed073820e77b8196d4d2c11b0513f24e794a5aa8a7bff949987c1038dc8b7fc92", + "ProofOfPossession": "856cda9fec5cc9a3fbd82dd63b0a328f88b6234120c3b1334cd282f8ec5f27141f7d752cb4cf64d9b2749fe2000c2fe4", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 189 + }, + { + "PubKey": "9712f56a2354458efd878793ad3a27016ec8181d97d4f66b4260eed8175f558320facff24ec07786942a07a221e3f2080ff50b31744030462eab41d48e4f9de907b875a59e7ed3db08b42b9394f5b4896d5cd224fdf6f2ee2fb6fa47e5b17221", + "ProofOfPossession": "8fbc69bb690f36a0faecf4420414cc3dc26028e9e39f3fcd346915a7ff9bfd6ab4c452fee3716a8f99f99348d6848ce6", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 190 + }, + { + "PubKey": "8812210caabd97621f1cc1381db8f797c9dc70a7adcc2fe0ca83bcdaaa963c2b091583652025c95ce94654585df6a45e04e97024f3a22e22f20f6ad597451a4427122b53307414e213a71cf99f45f1e122704744291129364bedb7004f2d1eb4", + "ProofOfPossession": "889fab3d49d3d16f910baacca7126b6a4bcb380fea9d5e91ad1ad2ee9691824dea03b6041ade9db31e680be4779f08d0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 191 + }, + { + "PubKey": "a01f957c13abd8be2cbf9a7ce79358caf6733ac361c2a253bd6640013308c1cd0092bea9481d5bffd9a17b5067243eb71185c562e42fe17015173f97270aea902e88ab5b49702f6fc11cd538c4dc0aedf801dde32e0abe156d07e7af3aacb4c0", + "ProofOfPossession": "aaf5fd723a4a8825c5ca0900c32748dd2c2feeaa34e659d7cf0b218fe038bcbde307ce9b15d57666398435d5eb4f7b20", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 192 + }, + { + "PubKey": "ad0248181fa421753d8b3d6affd69c0b4dffdd9837d71019e875384cde29a940322dd0b207c7570043b687896e377eed08dbfae4c94bd4a45473db8958469011666598b33706a05fdb399f81a97e657e866848caff22f9f68f7b2debf7381991", + "ProofOfPossession": "a514791aa8282fed4631aa211535aca9e45dc350a5e0e57597c4083e6f4d34b76e9dd3affcfb43d5e9182131564e3fb7", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 193 + }, + { + "PubKey": "b16bbb881d9eada7125e1158f88d3eb2e5875e28a52e2ed69a9b0f55196eba484c216b27b35e562c1148a49cf5cd48bc08a0ed2f8bab19e11af8866960f365f475e03fe7ab91e25cf162ff9bf812f75c1fcc72d1d6efbfc1c56f50de9492d63e", + "ProofOfPossession": "b37f94f4851f1e868a204afb623a70c030d77640f77733e1608eb4cf85fb7f54ff0424f7c51456f459be63959e79a320", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 194 + }, + { + "PubKey": "b1dc7c6f48684cf39ed816e32473f4cbceda6d976074d20bdd523cd03b0001b0cd7e800dea7e2b82c8a061a6dc38d4e7166aaa67b7dd7a6ccab967e79e84b4790ce58df6257c3397aa9b2c1ece5f4a015e8327800ca43d0d01dd985a39d8cb42", + "ProofOfPossession": "97c27014405cf98584b8c185175564f7bff41144b4ab8681a5f94021cded74dcf5df214f58bbeb5f59b17cf906e64bdf", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 195 + }, + { + "PubKey": "a2ef5d0110a665249d402b1bc4cd992e08937b0345a77e98740d33e21efefe21aa9305e47acf4d142fba3ab4012544fe077c412a103f1ba06c0d442af7007c40c61d9df4238703f9a8add7383327de90fe31027ff6ca1f77ac2fe69c0b1e015b", + "ProofOfPossession": "a5d58026f6181c0c3f2438fa71c1be4f69fc992eeecb505cf0c6f6dfba60ed46d9fc2bbc4ab3356b81fbfb0d5cc80e82", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 196 + }, + { + "PubKey": "8453ec6b3063ca434fc647b34ea8f8afb99524ad51c00cc25ae774217be461d5bed5658f3cca040e6008ac3458c9ade5124c7bcd07c65f894aa700aa40788b26d34f751b7271e630a2bcbf86441fabc9dec2b1ddd38bbc182ecbc23d66424e1a", + "ProofOfPossession": "822a3be9c0d00ebd6e06fdb07c97fc8e3a0b527f907c2adb813ef57a4e5ab60ac89f5d2578bdc8fededbd98a714fb88e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 197 + }, + { + "PubKey": "8cd3c3ab25550e25d48711e890f8a1e2cd1f8baeeeb02e85ea69d8239774fbe901e398411dc150b2d29c73beeb6a92100bf26cb6cc1234db1f93b06765f9c5a69c632489e05d2145879a1cbd8a216d3cc5291077bb91641989e1e64467aa20c2", + "ProofOfPossession": "8ba878e5642571855f98b9c9f023300cac2e584a93547124a1e08df3cec30e25f07579cd0f40e9105e3e49a60c3eb21d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 198 + }, + { + "PubKey": "ab6aab811e18bfb4ab1bdd5ce0b3ea0c9eeb0ca3a96e41d3396f65e79254fecf21fb01a6d9d6cfc5e0977ca6f7ba685f123747b767075fe53f53e29a172d7fd639385da776ed439d9bc26dc17e6f7322e13a65c472f6ce72691595200c8fa237", + "ProofOfPossession": "afeab563f25384a4a9db2e4d112b4bc4550deb3cff80e0ec53e3b9576f6be59a7ef174e61ad33014d7c41eb2f2af8c87", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 199 + }, + { + "PubKey": "8f349ecaea1dea1a71f22385250b1cce05be0db04f554af93d69724a97d852b76e1e63d2bbda9874d3d894c3a1a7d9f506d622be182aaa5a277d46e0bc152b05ee82675fe2741493bd11756c983e79ff3994f0d41b5c789f6be670262df678c2", + "ProofOfPossession": "89dd815a22e81e3c45702c62082b1a50317321210b4800e6c549b4ef1f184ceea3aad75312f3fa7fd2fe72fe4b1efa2d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 200 + }, + { + "PubKey": "8eae0da0416501f055ea6966bbe858914a76e7ac82d1b7b92dbff4a9fd78ebacfe41720926415b0eef1824f7b9e156fb0129d3d38987b2d78987f0c6fa9570c4f508d32faf1881ca7d763b92d2d615cb1f82a74aeeaab7f21e1ae5f69be9a2ca", + "ProofOfPossession": "8a6a247b883b2f6ba775d56095efb37ca2bc572e6d4971475cd513ca166b831188d47bb1fdfc8d0cfd060a5ccb3cb039", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 201 + }, + { + "PubKey": "b491e956cc7432c2f4d17c3b8c2f37802dc27658adf398cda9b6499a68555ef1ad0d00b3315bbbe10df38b0ff07c9b590ea385f43ae6a83cd30035b0110b049e5eeb5da8e46abdec5091a1ec5bf33a6c3a9351c3a85b1e8b9f0e7cf3aac393ac", + "ProofOfPossession": "98d194c63fd1afece458164bb44094ff74c074d0a3091b0252354495de3342d14f79167a5971a0d5acc41b08d1508f98", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 202 + }, + { + "PubKey": "ae087f67b690441504884a3533113593f2eac73830ad0fc7aa0772f18d3207356c1eb96d0873b3ec60a146897cf027a3101f78dae603c38467a5710c1a5341f68452f356315672ab6108d8c75bf12507c4b45f61332f5a313cd5fc9a0ff2bfbf", + "ProofOfPossession": "835ee6f96cf4ad8bfafdc6f7977b930aac3c3d1641d6aa6c93d740de8b425ec9dca61386b19064a18a7cee32d3ef3f43", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 203 + }, + { + "PubKey": "804a227a42e83db0f45011d402466b25dfdf34b655a4561aa1cd550cd889811b7b9ed76f21f81e677637d2fe4c819510161c2d21546fe7b3b59b2c22d951877a596735aee8b0d3d4ceca89d72dd5c08feca59345ddf7756c18c869292bc8d635", + "ProofOfPossession": "b418c31c00275eb1a74e78c98efa432ff66f9d8075f77c4fff0a68dde122c528c51c3f41bae06c132d9f78f43595df3d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 204 + }, + { + "PubKey": "a9310176b0d9d930852f3a3d2b64d9a1cd861cd2b933bc20ee2eb19f8de937217afa744aa29a892ad71feb222700bc72087f2494278d1c1cfbf153196212980fe0c092ec847eccca9e75f86547f1cb2e131376824eb6cbad0dc4c6e945100d34", + "ProofOfPossession": "97affd35b3bdfed2c21f8201d426dacc249b53d8d2d6468022c2a4409447728caac8b29812e0db8861e61fd59e5c7219", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 205 + }, + { + "PubKey": "996f4ae9ba68faff027e8c620257ea67acdcadbcf11a3fabd13d0cf319588cdcbfb879fe6d57143c3a400183e2436f9119993d2c2d27cc5fc62f7c102ee8ce3f5e555fdaa34535a64ea8576f9408428326538cab90098fea6a5edfbc61628efa", + "ProofOfPossession": "b11ee19a77001bfff002b508ad08411954578304ba0ff7575c5a0d4cecb10f348049c75a1441f5b134ca0e3fd237b579", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 206 + }, + { + "PubKey": "81be3c2e38205991d0eb1ab06e0e7846540223b62d751c9520631350c32e7fa158c52ecc6e0b296a9a6c9d897a91a5a11846f6752be803ccae836891e44690fcac920edc9bf868596fa9daee6e16603c331d2c106b722f3f58a33cab738a1745", + "ProofOfPossession": "996c451ca2f866545dce5f6916e61c443529dc88264a63ac15d4df0e96d252e95b14a0c201bc7f54cfdc357d3e512128", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 207 + }, + { + "PubKey": "a076c8809a2adf7c2fb43a97481c9e1a4f0acec082d3c979d5cd05428056dfdff32ec036adf3c0907b2bdc3d6fcab812143609e4a6017a188dc82e81b31b6f98f5e996b581819275e76d453899ea99cbd41039fc98c92a7412a46b5e98866e52", + "ProofOfPossession": "ab8a96a993bfc7c0619ec6e445d2b21525a5b29f6d1fcecd4229f0094a2c35c77a90be1050d18dfc52a72554ea2bb931", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 208 + }, + { + "PubKey": "a7b0bdbdd6a4f1fbbc418a7ef572948e850b2859b86a31e19ae7e30dcbd32ad577098f3770c11adcd47018da3bd3ae7d05038b0e231998418a244dbd9f5e00040396741c30fdbd316e763955518250a87c1534b714b0b30e86c9a9b711978c45", + "ProofOfPossession": "984cedc41dba7bbcd7ea0093ffb95beca718d352573314d2e0d55d86aa6b707e9e2e8e5ca328eb0bfd9465193d59e9af", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 209 + }, + { + "PubKey": "919fd6037f49b2ddbab3344990a286a7bb0b30b594547e97db01a50e228cc653ddea215633cefc329215fad3b41e1f0e0f772a22c6cd964ccf67dd8fe1f01cb5866b319a51046f34e6ea9520fb66bc219023ee608ca83af2ed78da58811d7479", + "ProofOfPossession": "a0d797d1fd1d559cc4106b9a6110194a4aa4f96fdb803e4c3fe269e489c81bd9d239d1c60eb1397bd05d46d8568d00bd", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 210 + }, + { + "PubKey": "a6f49e2ef1701e3074988921252b328aa8180fb562bb9b27641e7d2034917a5e3db37a243694b9a3d0d4c7aa093d4838036842b64f3fd66e77175ad1809415c5f31476ccfaa779378aa66751e54da3fd3c88859d304d9f8fe074b4087958e6b5", + "ProofOfPossession": "a55601c0970f421592b8ceeefae45339f62391cce3910e78e012227b56763d0fed2a5e7ba9f7c00067d806c06175fe25", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 211 + }, + { + "PubKey": "88127091e147c8540118af9f089bab90ff06e4a8d1aed5fb8c0eb0358ebb021d1adf8ee491f8bc54e14ca1f03a4d4eb60a726050a2dcfc6f84e3a25b6a77a078da25303f90cf453448002e477877551b4a862d95a886b1ca71087985f17b4282", + "ProofOfPossession": "93321058c6e7e93338a0a9f48893d17ba69ed9d3585a2ffa3add34dca5bda6c8e34f2979590221866866caff0793eb9d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 212 + }, + { + "PubKey": "82db2bb9d92d2755a41df48e04873896a3f7d523121c6188d388076eb9c2f4ed259939b87b23630ad884543a8e79674a07ebfbe0a6af4ee92c59334e78666dbfff9ad2cdefd45656074c3ef0f09435cbb8873117ceee88283693a56061b4dccb", + "ProofOfPossession": "9910d5f734e0f3b500ce3fe08dabb28e415d0997962d9c44a59ade7761dd69d26229a5d2e5a7327c09db870f2f952718", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 213 + }, + { + "PubKey": "9403f6d797a6eb131d93b3528f4d1db6f641bbdd790559bc324a5196bf4cb661199b153d3b64b5df64a1da783121deca19528bd3de676f36b832ce9c04b4e7f897b25d2bed1b3a49a37e0f2cafe4b08dd74d12706cb31ab3a6459d6513f0a53f", + "ProofOfPossession": "8fa26ddee8a84fcb9c88602d1c6c62dd6137f006f769fff780662560b071df91906e5a1b77d7d9811afd628eb7fcd8c2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 214 + }, + { + "PubKey": "98693d3693625e7971ba3a82f3df36fea3598a058ad0a7b53d1c4cb20eb06af720fb4db0aaf095cdc9d73bba1aaf0b9803d679293d113bea63337dd6467cb911a76f89cd8ecbcd4c623e8fae2db6d55bacbed011710c88e794722f455d537275", + "ProofOfPossession": "b4f66151370725e5e83d0aee604044bfc92b0348ed76c4874cdbd8961fe4a6f2d361141e0b9758dde500eb4500236cd8", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 215 + }, + { + "PubKey": "b600e3fb381cfbc3f1e1151b947e76853e8ae6d0fc9b405d96f6f0c976e6b8c5885c10e679c4ac6ae9578f35dedb5e75046dc6179dcb84d2e93b02c97e96fe80adb9ee19a5468503eef0eb88f27a9d8c6f13f11ffcf3d3a31c57f23c963b4386", + "ProofOfPossession": "8316c8b0392c7998ca2ed855238bd4d5b5299427bd56480ab0b968a8c5d4fc7f4559376ae84bae124c94abb3b770f165", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 216 + }, + { + "PubKey": "99cf351f8b7978765dab4dd8114533f3cdd48778f0b5a97d957a1d2e79b4bf5a52ba785c3bbb6468df18e491dc3a70d914436799329ab5f3c222c42aec1dc66b79bc8f35bfe959f56783823d9993e489edcb4f89b3dd21d1f572caccdbcfab84", + "ProofOfPossession": "b26d9a56bbf56de52b04d35a421603fb3ca879d5ecffad16658e0f2b754d1ea2cd8b40a3ec449c8e62b04207a30210dc", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 217 + }, + { + "PubKey": "ab526e194b1d4468c9f24798feaa4a88a6ff6e3bf8ead05b0d9cabca3480d49d175508ec973e09f9be8bfdc178d8b91e038571f345bcd279b5784b68317130af84a04e05bfd503ff1d4f0fa3a2966c9cba61ce0dd5d38dfb9aa0139dd915b90d", + "ProofOfPossession": "94655d01ebd6c0681bcac08795e275b72406e721045665ffbe6cebcf480502bb27698212d9b1633b337738c9b5780371", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 218 + }, + { + "PubKey": "a4c698b8a7c530633c7139538e3471402d10e122ace2a20d6e368fef9f1ad300c3ede703aa783371a31a8d2e3390ecda0b8e91c2baae047265779423bafa917ff3068ca2677426aa11ebae74767d6a3c1bc370b9c933368b8f8befff4db6b356", + "ProofOfPossession": "a6afb8a1e10b69acacf33c13f2d6fa43584e88ee785dc9609ff1118be3170a201e17af73a5311aaeec61159606981440", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 219 + }, + { + "PubKey": "87604d0ea2d6a3e2d372f312ff111d6e067cf2c6b564b05e0171e397484c11707da6542b727e3ddaa1854b6a2141dfdc0ddf2f9fd3ce7ad2e6decd9aa1e7d4f642c941c48cfa60ef770241a0dd33119d3e20f7c922a0cab6ea6ce55674cd378b", + "ProofOfPossession": "86bba10689683b3671f70ac832051538a8b66462a22ff9c02f37786ea3c39f0b4670053f3d46a250c1dc88eb933ebea9", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 220 + }, + { + "PubKey": "8f30fde3c94e8b7330d0dea7ebed284bd008f2def046890e558e10e1db7d33f83f73ae44be96e81ffc00f9b5b43a29a31849af3ca5332fd8152803aaacff00d991890404d4b5da1c98fdf119f430cc9641604fa188b53d8c1878aee798893db6", + "ProofOfPossession": "b895677d5adc8f56fe2417360a206e9f189b067f9e94a4f0b77c49466dd1a93c4d7b6cb6feb126b72ea5bc747ceebd6b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 221 + }, + { + "PubKey": "b2532ec3b175187e83a13637115fd6c4860058cf52c986eb8d6d7c833ee08dcfbb6b8d7c4ef561e21e5dad7676239da507fa92abd633c48908504beb44f805030ff969b520cf825f40e50daebb09278d9a52e5b3621eb9f8caf47116183a525f", + "ProofOfPossession": "97c345189f0ad6a37dcfde2108a4ff19fbd193ce50db6cc0f8c9caf71f7d56afdc1e45e10351d4087c676bb73888f48e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 222 + }, + { + "PubKey": "8b2ccdafdd96034d283f21ab632fa62c41ec57bec789300f4f7472f08547125813153a05b49877a0dc56b436421e8fa315e30cdc0f3b0dff69bcae6a3c4c2ff80ccd7df8561956cd432c14560fd3251cd91b863f95dd30835baa15cff4d4f0a8", + "ProofOfPossession": "aa9a0feb12260016ca01a72d26741679481cb792538bd79817ffddb3f39e4f7e6d38482bd1430ec8457328560807e4fb", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 223 + }, + { + "PubKey": "a8edc0ca377e1afbdc5b5fb301f61a9f2943ebe2b96669deaf4dea7e8e0ad8cca82c1d4712d32ef14f30fcb0cdc51561038f8ce07449bb96d5e63825e3160aad09f916c1ab1cbdd339494b62fb433d6618d1ddb9b1190e7af7a292d61f446199", + "ProofOfPossession": "b729d9a5476ad6ac5de0dc22805bbc39a12d38e6c235fd78868b45c0f8b92190cd3c1d9116431cfaa969167ef82198d5", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 224 + }, + { + "PubKey": "822a0ed41cc6ba22b83d984fdbc6e64e43393c11f7f0f7f86560caeab430de50800d0bc277e4e30254a638da9ee5d272105eb82e5dab114f6cea2892edff1dc84d4db012f07e6375e5980f48b6d8a8b5e0768d00ac32a65bcbf71abaceeb3515", + "ProofOfPossession": "8d6066ca7994bbcd04a9c5429db1b1df923a6677ae4ef166e117e0ac909d1eb3bd3c2774faaf3df1cb75904b3db8733c", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 225 + }, + { + "PubKey": "aa05c013131152bc841421ddb143ebf225728a25a702f6d3c658b1eb717e08ac8018a877e35f8df79afa777ce34ed072177f8c94672c12eeae0f14c0e92cab2bf5f7d7f0289858859bdec6f7e39fb63f2d4741b4f74bedde1b9e50ab2c7afe51", + "ProofOfPossession": "b341f8bf7db32c3829e0a177b508ca9b590db5f5d0397189a09f87668fc58e4cdaef88f8bfbba844b4587e0a49e7010f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 226 + }, + { + "PubKey": "87f3aba4999f4fefd21eef06e946afc23142500bf5eab74b047348f198e8f9fce56811a299d03b4daf07a7a25173ed13058811b3e5dc60e468b4a33209393159896257872d8381b79895f5b7b96009af5112006232c52f6f2e22bb8ab692b958", + "ProofOfPossession": "b07f37ef6548ff1e05dcfcb73c8e042f35b8984e0bccca2c1fd5ff42a0f73097bf2aa9ad5b6644efa1cf1ab540f5f0b2", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 227 + }, + { + "PubKey": "b8a52babc368063d0f62dd1b8aa8326a046bbc40e48c3281c48c5e117cc81be992b9fa9f13292d5bfe39aa9bf0db25fd13636711866f5c423816535edd3fbe0a136738509582a2aee89ffa149754452a7cca52d1fe5c31ca84fc145fc0db828d", + "ProofOfPossession": "a1433e94f58f6292e911398ad89a26e74d75c21a423d54e9ece25a0f21a5d9b26a4eab2323af4eb8290e731ebc1c1c2f", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 228 + }, + { + "PubKey": "b91e8cf60a0eb0763f8153ded8fff52aa80d971cd5b11f3167297af1c259497c005a8223daf53e3a273fbf18d39462f4037ac939fb2940a8395c2e920987dc77dea46bd99f00870b6bc8bb03991d18e6ffec46cde1b4f45a3d10830532d96351", + "ProofOfPossession": "90f67ed41f3a02cdc0fff0fce8ecaf77f4787098106ef350ba854f2279d4066f32834f913e5ed65cf60e167675ac8224", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 229 + }, + { + "PubKey": "a8b12d094e400e4dd909a09cdf55bc2ec6c1959405940a2d96b4e337364f15a0345bff3eebcb2a0f29fb3c9f6e99dc7b07c10770f25e07b0a41b624048ba6db4188e1b396ee66fb28cdbfcf711bebd5948ff36b2beccee42e7e03cc8a655b1f8", + "ProofOfPossession": "94431ac7b103f80ed68ee697cdd4e868b5b11352ec83ee6ebf9114fb97924b75974ac93ca7529a5ffb4bf1805546550d", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 230 + }, + { + "PubKey": "a85b754d3a6902cc7ecf5fcc0d5861104392d993d60109f553eb08fd0a739c858182337d9bc81ff8d61075aa333497ad0f2bd15d243cf3dad1fadd90d9086d0af9c67ef39e6acade4943278571708ae0001f217f2d66e6a7065f249e7e753a47", + "ProofOfPossession": "b4986ba159e9db173162c64610d0203891888bbc7b5791f749fd9274d8018ccf477726c096dbca01e2b36a1082906ad7", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 231 + }, + { + "PubKey": "89f6fbcb0d85d78850e1faaaee913212964e4bd1e75f744a4246718d6a9264f03e174dabf39b112bf6079a77e4ed81a705986cfbf5f7875c2ae666542b01adb597ac20b19559e8ac36e1fb9ff78669fd5fa4c29537a4cc82bfc5ae1624f2f04b", + "ProofOfPossession": "b765931ce3d2c4be7675f9e0d0eb519192de529f8ca9850269ac23e3129b512e1adaf3ccc49014fb176f1ef0a3225a8b", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 232 + }, + { + "PubKey": "91a9c49b1d9dd9a67b6232df617586549d91ab98869ad9a88bba21253cce426aa5abaa27b6f2a8535a4c5964d6f4cbf30922828529dd1d1accf5fef523500dff288430901135ad3ad25007f3a7a945b2688e42b3526d66d20e470b9dfdabf800", + "ProofOfPossession": "af35759842b942795e46eb0e1320d5ead68267377766c1f90d3fb8590e76a2261ddb19846900bea4015c08fac568b57a", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 233 + }, + { + "PubKey": "8d66416d9c0e4a0caa4071a31bf50f72057e0d17d517575d2a03ed4eddb7e0e894a4eb5b01ece833496aa1f529824b8d106470c536a266392660693f703452897f2dd7bafd9bfa6ef505036a9e5a183f9f0b5eeef79c26d068cac5a186c9ea14", + "ProofOfPossession": "94299e6e72a0e1ba15758aa10fff9e415887e409ff312d2c7283cc5ea79b8b10a78f93875387d954229b39e4a3b65968", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 234 + }, + { + "PubKey": "abfdeb495a0235385245d0070d77faef97bf3369765408dc0c1ff6e28c058101d59dbe29501406d3157f8ae83a376108177aadf2c809b419cd3fad5b0a649e19d49658a5caa39b062bbdfe3e4e9e5a344d16949a7faf1e8f8931a4c603a2a3fe", + "ProofOfPossession": "a56e67f24bd8b73b480a62092fb505ad7c5e6dc11798242db5bc576c8609c6b8eb0635f9b7efcb9873ab4d863c66ff45", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 235 + }, + { + "PubKey": "8058f17aff644735ee6ad562511ec660090e57bce8dae693698e6f642a2fa99ddf5abe3770f209e1b7ec9ffb730562cd03e17f4b6c476e6f97286d876f274dfb5b745232ff3a9723133ba89fbfb5087206a12a5c060f8226b6a04616bddcf14b", + "ProofOfPossession": "b7e795e5799e9a6be0412ca81dd86b6b100b88416b56fd63768aa58b7fe64a8f7957812e4e2f82508f5e36a55e758dcd", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 236 + }, + { + "PubKey": "a4eecba7f794f2acf80b7c3a3e74b1db5dc032b7706b6022ff1f6b7826f02a228244fe5b42fa1c27fad8f0bad5a05a7517ee4f285a7bfeca4a7f8af1d6f13c70ce379d67c564d77288ae3078e8e4df9226a2f198ac070b1eba63685d64363f43", + "ProofOfPossession": "aefd58733dc399f2ad25b1d64ecd8527806e55a73380adc7b4454761309a43d51063e642279a7d33a63364fdff4eccf3", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 237 + }, + { + "PubKey": "9580b49bba586edebdfc41f477c411ac53ac1b07cbb0536842a7b330396fec3051c00bb2dfb834b228dff49a2fb82e270a32f42ebc4757b968b2a4b2ebfd878f973b38600a289b106b1ff6b16a8d00d6466c02f139ecd1b56a19524c7633ef1c", + "ProofOfPossession": "b519361560d886f091e3ee4e2bf7bdc08fcf4dde32b80ae7067995c71fb295848eb6c955b7ef17f36aa1d3595dc81ebf", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 238 + }, + { + "PubKey": "a47087812417bc16039073e7a14ce65a3c708d29c5693651a87ad08400619055d3e2d4c10c27c7a66fe30674880c3fbf1260614994c41be94d4191763568c10aecf7193d8e2247cd77f21763baafce48b3ea2c2d4fe91073681e70f0eaab14d2", + "ProofOfPossession": "a4c795d6d62da07baf971d37d160d168039447e7218696029b301ac5ba51bcbf0cc438783eb8ee23cca9f0c547b7155e", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 239 + }, + { + "PubKey": "8dfee3a8e7f400f9f53fe2c2d62e1fd01707584b2db6b59e881bae34f03d46a0df56e2cf1796bfe6011538ed1b2d4dc500dc746eee50f27b838db2c1dc4a2214e3283867321f1be502fbe6fde35c4b1d14b577bf469ccac8bd6b1cb5835a9d7a", + "ProofOfPossession": "8c21dc3e5410d70ee39ffdc96f15ca7adf110a62315337321290f9a68fcae48dff96d875c0f428453064ad7bbac84534", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 240 + }, + { + "PubKey": "a32eb8ea2180698754461de761c6505f22e8ef740beaa4df5569d4af7128211caf11dab45afa6b6ebfca184f2049f58b0eb14c8c69eb31cc7f4d361cc5725bbcaaac045104828047813d6bdb47f87083c9606f1d8d3aa02a18e2ba2be17a627a", + "ProofOfPossession": "988e514d3bdb0af03de11eeb9184b499860d0c03726ec45f31446d774ebe3ce2a1d545878162450d6c76602c4fdabc35", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 241 + }, + { + "PubKey": "b2d5b48ca2cfb2c5c5a83a4b349909bb9bd729105eaf4883233630855ef8ed4f058f38742a972ec02dd2169fccdcf64f02ab65d208332c95c4dcf621c829ec5515c1459b7bca55e53dd1e5a77f9bbc9920088a17ead855b7a778254631b154a8", + "ProofOfPossession": "a9e61d8bc7eef6060aa0067e098efc7f43359d114c27033493a436d7a5744d08a289ee1dcc8d6731a29a9b0fbf55c962", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 242 + }, + { + "PubKey": "8222d24c6413869152100558f41106ed0408d10499b31f4f69ac224ebe811d2bbb9a5195fcc271de450c246864b536df1050e7ad23e5a0512256dc616249f83b8f7b5c51cfff32a1d380c199763ebac1c326e4c336eec156951619324843e3ab", + "ProofOfPossession": "b09cfb068f6e8d98b419cdabcb886c3b93dd69ce940065895c99de7f3c91b1ea4c6b231e99f7ef1e2e8a7d13df5cc059", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 243 + }, + { + "PubKey": "80c743df275f25d6185b137f9252c536693d6873fda1e145011ab55a14e19aee20a15c3a20d44820a31cb3a3cbf941d10b99f45d5c5c428c84c897764c97db1476b49b211ad5fcda17976b252474f6e52d6a2601e8550bb05561aa6e42729ee0", + "ProofOfPossession": "b08f50e65a173a1fb8b5075d2f32ddcddc6d35673583eadcb0ae423d433578939c89e9ae96cdf228f5ceacd999fc02d0", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 244 + }, + { + "PubKey": "88be50704494468f8b9059e7f5fcadfb3927c8b26cb42c28e93bca2dfd3b1a2d08952a71322034fd43b6e1dea8d2292c02006fd295b22047fb2aff9a9b5998ad9cd72ef39b594a4181f2ad128a9a933b7357f6665e340ca525e5e0314b02fa5f", + "ProofOfPossession": "b5c00a713f26d3a4a519f363fbed8e459d45e3b53323bb37dc0dd3dec0e3f329a5a917c1474a321977322675087b9561", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 245 + }, + { + "PubKey": "8707b04dce1f7825f1ae4270444e143befa167d535ca8ce4c0b7c233ca6d1b10ed02bd8f62bf955f4280a9cc4a0f00e7194748ee5c6f3021f8740ad124dac573c3666cbfc0e423c2d17cb3b343b945337ed13e5b5cb36a332ecc420e01614752", + "ProofOfPossession": "b3579e68919132ebd96cc5fcfa9aa1a8088814124a95beef1fbd235013ea974d6467309e1404fd4cf6f1ce0a55001230", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 246 + }, + { + "PubKey": "af58a8d38719ebf947489623e8f3d49c485b556be0fac29785b5fd96fba94518eaf5019aab28166430f5a3b604e4938705c6500b0667de27b4a49d8cc430809aac7ef89e04ec2f4453ee1dd08bc1d1be485fd06bb690198a4102eff77a39f876", + "ProofOfPossession": "b7d44251466be3b1bad77c1c2c60825f6b0d29d8d7acd9f5f29c9e78ffce0f0d0b87f2f14d1e93b8dfa117af388f1651", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 247 + }, + { + "PubKey": "b81f4b67a84a52119b7f3b9c5c4cf28f92bc237f75168139cb37fa490f4c6de325ad75ca55b2fdfcab63309ca5716d5b07c27f87de4333cac44dba5a2ba90b027a10b4085877b9b339aa66f98127963957aab65562b96141123bed68022b0344", + "ProofOfPossession": "b51431593065f3b50dec3ef1c138ef17d76e610772d54f4b26419d3f29f05442652f24d668ae8aa56bbffbeb24a57c93", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 248 + }, + { + "PubKey": "b60f1ee395f24523a599454b5ecc9ef0c708e32c39fc2e257f274adfc73dda968a3e92a7d503b21f1b3f38b7856d5ac6082bd436c0d6f67018e72c0ae2c4a432dbecaa4165ef9e232304d7549d811ca5b8ee2c4924b9ae71080c21ac73388128", + "ProofOfPossession": "8fa044b1707495bbe50f34375eb92a478c1e29edd94f4a487a73fb42d43ae150caf0228a31188ec0a39750a760c09a18", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 249 + }, + { + "PubKey": "8a0e64880201939d602f3054c3e5eed4c9d1d0452658475f7a72004a6a1d64db49118e72746d261ab11daaee9ef86c231779873c0e9b86b30e71d1fdd37953d0e7498531d53788f06fc67465682a4434ee07a5e383cb6852817d209773d3f86b", + "ProofOfPossession": "9132377a51231f1c75e7c718e63fdfd856e72cffff2807d35b5755321ae8b7863c8e7a651d1fbfbee76f39ed21465741", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 250 + }, + { + "PubKey": "b6ad7f7074840e7601adea3c53e088cb229d4d96ee5b158a3dc16489c813ef352127c0b13274c3e80bbbcb9a96c5e2f20d245fb442b68b4244253c68365173a59906014adee66e445b2ef4afb352b95a1520e14e664844ac5147f54045f23b09", + "ProofOfPossession": "b3771084ab0d554e236086d39038a618bbf43f4348f5342d83f183caa9bdb90c4270958328ff546d526e643998c929cd", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 251 + }, + { + "PubKey": "b171f3bf66b61984f321a90d765358a6d61f526e1f765226b6d3506e855f64168745c85b4985df3518b50ba90502cf1d06096209b0121f18501db5ea359f2f48bd2b8ee657facd11cb30993d020c213b52ffd1878cdcf86f9315caa6a502c077", + "ProofOfPossession": "b88dca869715b36b544c03aee7086ffaa60f5501715e0a85ca3a97da794188ccecee82f3934f6214df0a7885483f6850", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 252 + }, + { + "PubKey": "9214162c361c4eabd6868c35389e1f4d5d3f0135b2c9a615aa2357c6431127a4a770e73d6f264f8a5a888453974f1a1c055612d953bd280888c6d0ac6d90523bdb8da3a0678fb2f89d648c19d26edb17bd7a5963fd1705158fe5306ba74fa746", + "ProofOfPossession": "b8b4a14a695982b4600f1c6fceca2e5f652d73b09967780c02c6ffb8e55976e3a9b0728b89b23ba497fbfbd503471624", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 253 + }, + { + "PubKey": "88f75e04d8db5df01fc84f53646d0b55c8ccfb5270b45100a97becdccd545d195a92d3f6b659889e62ef0bb7a745a80b1959be20656bc7063652d5774b369e388911ebbc2ccb5fa81538b446002913a4788bd4ad8e86aee31bd9539fecb8eb4b", + "ProofOfPossession": "8bee84d68fb074f88de52e701eca6dc3612d7c1ae9798c64fae118eddc3c3de9bc948c560d7316aee7a91ee4fcc66dd1", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 254 + }, + { + "PubKey": "ab95ce417f031caf15e4906da8121b009b87299eb3aaae39c9dcd66a577aed49af8fd1c777d3a1b03d1a182149b7b81d0f4e0eb7bf84505754536cf1e2f5e8a4b8e7a2dece355baf54b3233aa4daae1edb52fd236230fbbb9f9304ef97505f40", + "ProofOfPossession": "983c1b7a8aeb774e77aa20f912cbb28362543d738649820fb7c87f62fbb6d01eef7b3f7266fcbf1f806826f375e0f545", + "WithdrawalShard": 0, + "WithdrawalCredentials": "0000000000000000000000000000000000000000000000000000000000000000", + "DepositSize": 6400000000, + "ID": 255 + } + ] + } +} From cf6479f2640fcf9b82ac8e211daeb437f470383a Mon Sep 17 00:00:00 2001 From: wqking Date: Mon, 7 Oct 2019 22:20:29 +0800 Subject: [PATCH 03/20] Removed redundant files --- explorer/website/config/default.json | 16 - explorer/website/index.js | 4 - explorer/website/package-lock.json | 1791 ----------------- explorer/website/package.json | 19 - explorer/website/src/application.js | 66 - .../src/controllers/blockcontroller.js | 36 - .../website/src/controllers/controller.js | 41 - .../src/controllers/transactioncontroller.js | 36 - .../src/controllers/validatorcontroller.js | 36 - explorer/website/src/routes.js | 35 - explorer/website/src/util.js | 33 - 11 files changed, 2113 deletions(-) delete mode 100644 explorer/website/config/default.json delete mode 100644 explorer/website/index.js delete mode 100644 explorer/website/package-lock.json delete mode 100644 explorer/website/package.json delete mode 100644 explorer/website/src/application.js delete mode 100644 explorer/website/src/controllers/blockcontroller.js delete mode 100644 explorer/website/src/controllers/controller.js delete mode 100644 explorer/website/src/controllers/transactioncontroller.js delete mode 100644 explorer/website/src/controllers/validatorcontroller.js delete mode 100644 explorer/website/src/routes.js delete mode 100644 explorer/website/src/util.js diff --git a/explorer/website/config/default.json b/explorer/website/config/default.json deleted file mode 100644 index d76eb7bc..00000000 --- a/explorer/website/config/default.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "database" : { - "driver" : "mysql2", - "host" : "localhost", - "port" : 3306, - "user" : "root", - "password" : "", - "database" : "synapse" - }, - - "server" : { - "comment" : "the port the web server listens on", - "port" : 3000 - } -} - diff --git a/explorer/website/index.js b/explorer/website/index.js deleted file mode 100644 index f35be68e..00000000 --- a/explorer/website/index.js +++ /dev/null @@ -1,4 +0,0 @@ -const Application = require('./src/application').Application; - -var app = new Application() -app.run() diff --git a/explorer/website/package-lock.json b/explorer/website/package-lock.json deleted file mode 100644 index 460fdbe4..00000000 --- a/explorer/website/package-lock.json +++ /dev/null @@ -1,1791 +0,0 @@ -{ - "name": "website", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha1-qNCv1zJR7/u9X+OEp31zADwXpx8=" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "colorette": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", - "integrity": "sha1-H5Q+WjV/rBC04PWq7zsUzcGvbsc=" - }, - "commander": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", - "integrity": "sha1-RZWuw1MFJeZx+2+F+xc9+P+L9Xo=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" - }, - "config": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/config/-/config-3.2.2.tgz", - "integrity": "sha1-x9MbsqnTABOpBf9CAQHjsbpY7q0=", - "requires": { - "json5": "^1.0.1" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "denque": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", - "integrity": "sha1-Z0T/dkHBSMP4ppwwflEjXB9KN88=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha1-F7EI+e5RLft6XH88iyfqnhqcCNE=", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=", - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha1-8GlhdpDBDIaOc7hGV0Z2T5fDR58=", - "requires": { - "is-property": "^1.0.2" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getopts": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", - "integrity": "sha1-Z6D+RxysucaH2BfKtkULlt3oMTs=" - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", - "integrity": "sha1-Wc3eCiopfMKusMZEWhle6J8SdVA=", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=" - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U=" - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" - }, - "knex": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.19.4.tgz", - "integrity": "sha1-z2L4gkOSOHFSoKGIplhdXepoMrs=", - "requires": { - "bluebird": "^3.5.5", - "colorette": "1.1.0", - "commander": "^3.0.1", - "debug": "4.1.1", - "getopts": "2.2.5", - "inherits": "~2.0.4", - "interpret": "^1.2.0", - "liftoff": "3.1.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "pg-connection-string": "2.1.0", - "tarn": "^2.0.0", - "tildify": "2.0.0", - "uuid": "^3.3.3", - "v8flags": "^3.1.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "requires": { - "ms": "^2.1.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha1-ybpggfkIZwYH7nkGLXAN8GLFLtM=", - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", - "requires": { - "mime-db": "1.40.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mysql2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", - "integrity": "sha1-L78xTaAWph0Dj/zVeioKo7e46sw=", - "requires": { - "denque": "^1.4.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.5.0", - "long": "^4.0.0", - "lru-cache": "^5.1.1", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.1" - } - }, - "named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha1-zrH7/1C2szSStc8hTM9eOc7z0Og=", - "requires": { - "lru-cache": "^4.1.3" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pg-connection-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.1.0.tgz", - "integrity": "sha1-4HJY8oBHZUCySBjrtdyinhAcpQI=" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ=", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" - } - } - }, - "seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sqlstring": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "tarn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tarn/-/tarn-2.0.0.tgz", - "integrity": "sha1-xoSZ9piB+ZrpVbQxfKfSEtlC/e4=" - }, - "tildify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", - "integrity": "sha1-8gXzZ01nfOaYtwZ6melJzgO0dUo=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=" - }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha1-/J3CNSHKIMVDP4HMTrmzAzuxBdg=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=" - } - } -} diff --git a/explorer/website/package.json b/explorer/website/package.json deleted file mode 100644 index 8e2fa5df..00000000 --- a/explorer/website/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "website", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "body-parser": "^1.19.0", - "config": "^3.2.2", - "express": "^4.17.1", - "knex": "^0.19.4", - "mysql2": "^1.7.0" - } -} diff --git a/explorer/website/src/application.js b/explorer/website/src/application.js deleted file mode 100644 index c7dde2d2..00000000 --- a/explorer/website/src/application.js +++ /dev/null @@ -1,66 +0,0 @@ -const util = require('./util'); - -class Application { - constructor() { - this.express = require('express')(); - this.config = require('config'); - - this.controllerMap = {}; - - this.initialize(); - } - - getController(controllerClass) { - const name = controllerClass.name; - if(! this.controllerMap[name]) { - const controller = new controllerClass(); - this.controllerMap[name] = controller; - controller.initialize(this); - } - return this.controllerMap[name]; - } - - getControllerRoute(controllerClass, functionName) { - const controller = this.getController(controllerClass); - return controller[functionName].bind(controller); - } - - getDatabase() { - return this.database; - } - - getExpress() { - return this.express; - } - - initialize() { - this.doInitializeDatabase(); - - require('./routes').initializeRoutes(this); - } - - doInitializeDatabase() { - const dbConfig = this.config.get('database'); - const knex = require('knex'); - this.database = knex({ - client: dbConfig.driver, - connection: { - host: dbConfig.host, - user: dbConfig.user, - password: dbConfig.password, - database: dbConfig.database, - } - }); - //this.database.on('query', console.log); - } - - run() { - const serverConfig = this.config.get('server'); - const port = util.checkValue(serverConfig.port, 8080); - this.express.listen(port, () => { - console.log("Server is listening on port " + port); - }); - } -} - -module.exports = { Application: Application }; diff --git a/explorer/website/src/controllers/blockcontroller.js b/explorer/website/src/controllers/blockcontroller.js deleted file mode 100644 index 2181ea4d..00000000 --- a/explorer/website/src/controllers/blockcontroller.js +++ /dev/null @@ -1,36 +0,0 @@ -const Controller = require('./controller').Controller; - -class BlockController extends Controller { - constructor() { - super(); - } - - getBlocks(request, response) { - let urlQueries = request.query; - let query = this.getDatabase().select().from('blocks'); - if(urlQueries.i) { - query = query.offset(parseInt(urlQueries.i)); - } - if(urlQueries.c) { - query = query.limit(parseInt(urlQueries.c)); - } - query.then(function(blockList) { - response.json(blockList); - }); - } - - getBlock(request, response) { - let hash = request.params.hash; - this.getDatabase().select().from('blocks').whereRaw('hex(hash) = ?', [ hash ]).then((blockList) => { - if(blockList.length === 0) { - this.apiSend404(response); - } - else { - response.json(blockList[0]); - } - }); - } - -} - -module.exports = { BlockController: BlockController }; diff --git a/explorer/website/src/controllers/controller.js b/explorer/website/src/controllers/controller.js deleted file mode 100644 index dc6dd455..00000000 --- a/explorer/website/src/controllers/controller.js +++ /dev/null @@ -1,41 +0,0 @@ -const util = require('../util'); - -class Controller { - constructor() { - } - - initialize(application) { - this.application = application; - - this.doInitialize(); - } - - getApplication() { - return this.application; - } - - getDatabase() { - return this.application.getDatabase(); - } - - apiSend404(response) { - response.status(404); - response.json({ - message: 'not found' - }); - } - - apiSendError(response, errorMessage, errorCode) { - errorMessage = util.checkValue(errorMessage, "Error"); - errorCode = util.checkValue(errorCode, 1); - response.json({ - message: errorMessage, - erroCode: errorCode - }); - } - - doInitialize() { - } -} - -module.exports = { Controller: Controller }; diff --git a/explorer/website/src/controllers/transactioncontroller.js b/explorer/website/src/controllers/transactioncontroller.js deleted file mode 100644 index d76e55e8..00000000 --- a/explorer/website/src/controllers/transactioncontroller.js +++ /dev/null @@ -1,36 +0,0 @@ -const Controller = require('./controller').Controller; - -class TransactionController extends Controller { - constructor() { - super(); - } - - getTransactions(request, response) { - let urlQueries = request.query; - let query = this.getDatabase().select().from('transactions'); - if(urlQueries.i) { - query = query.offset(parseInt(urlQueries.i)); - } - if(urlQueries.c) { - query = query.limit(parseInt(urlQueries.c)); - } - query.then(function(transactionList) { - response.json(transactionList); - }); - } - - getTransaction(request, response) { - let hash = request.params.hash; - this.getDatabase().select().from('transactions').whereRaw('hex(recipient_hash) = ?', [ hash ]).then((transactionList) => { - if(transactionList.length === 0) { - this.apiSend404(response); - } - else { - response.json(transactionList[0]); - } - }); - } - -} - -module.exports = { TransactionController: TransactionController }; diff --git a/explorer/website/src/controllers/validatorcontroller.js b/explorer/website/src/controllers/validatorcontroller.js deleted file mode 100644 index 9843ad53..00000000 --- a/explorer/website/src/controllers/validatorcontroller.js +++ /dev/null @@ -1,36 +0,0 @@ -const Controller = require('./controller').Controller; - -class ValidatorController extends Controller { - constructor() { - super(); - } - - getValidators(request, response) { - let urlQueries = request.query; - let query = this.getDatabase().select().from('validators'); - if(urlQueries.i) { - query = query.offset(parseInt(urlQueries.i)); - } - if(urlQueries.c) { - query = query.limit(parseInt(urlQueries.c)); - } - query.then(function(validatorList) { - response.json(validatorList); - }); - } - - getValidator(request, response) { - let hash = request.params.hash; - this.getDatabase().select().from('validators').whereRaw('hex(validator_hash) = ?', [ hash ]).then((validatorList) => { - if(validatorList.length === 0) { - this.apiSend404(response); - } - else { - response.json(validatorList[0]); - } - }); - } - -} - -module.exports = { ValidatorController: ValidatorController }; diff --git a/explorer/website/src/routes.js b/explorer/website/src/routes.js deleted file mode 100644 index b4202e4c..00000000 --- a/explorer/website/src/routes.js +++ /dev/null @@ -1,35 +0,0 @@ -const bodyParser = require('body-parser'); - -const BlockController = require('./controllers/blockcontroller').BlockController; -const TransactionController = require('./controllers/transactioncontroller').TransactionController; -const ValidatorController = require('./controllers/validatorcontroller').ValidatorController; - -function initializeRoutes(application) { - const _c = function(controllerClass, functionName) { - return application.getControllerRoute(controllerClass, functionName); - }; - - const express = application.getExpress(); - - // parse requests of content-type - application/x-www-form-urlencoded - express.use(bodyParser.urlencoded({ extended: true })); - - // parse requests of content-type - application/json - express.use(bodyParser.json()); - - //express.use('/', express.static('public')); - - express.get('/', (request, response) => { - response.json({"message": "Hello"}); - }); - express.get('/api/blocks', _c(BlockController, 'getBlocks')); - express.get('/api/blocks/:hash', _c(BlockController, 'getBlock')); - - express.get('/api/transactions', _c(TransactionController, 'getTransactions')); - express.get('/api/transactions/:hash', _c(TransactionController, 'getTransaction')); - - express.get('/api/validators', _c(ValidatorController, 'getValidators')); - express.get('/api/validators/:hash', _c(ValidatorController, 'getValidator')); -} - -module.exports = { initializeRoutes: initializeRoutes }; diff --git a/explorer/website/src/util.js b/explorer/website/src/util.js deleted file mode 100644 index 58f1bd1c..00000000 --- a/explorer/website/src/util.js +++ /dev/null @@ -1,33 +0,0 @@ -const util = {}; - -util.hexToString = function(hex) -{ - let str = ''; - for(let i = 0; i < hex.length; i += 2) { - str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); - } - return str; -} - -util.stringToHex = function(str) -{ - let hex = ''; - for (let i = 0; i < str.length; ++i) { - hex += Number(str.charCodeAt(i)).toString(16); - } - return hex; -} - -util.checkValue = function(value, defaultValue) -{ - if(value === undefined) { - if(defaultValue === undefined) { - defaultValue = null; - } - return defaultValue; - } - - return value; -} - -module.exports = util; From fe7c635308162fdd8f0fb68c979b5df1b81c7bc6 Mon Sep 17 00:00:00 2001 From: wqking Date: Tue, 8 Oct 2019 10:43:42 +0800 Subject: [PATCH 04/20] Increased database column size. Output error instead of panic. --- explorer/db.go | 4 ++-- explorer/explorer.go | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/explorer/db.go b/explorer/db.go index 6d030506..23cd98e7 100644 --- a/explorer/db.go +++ b/explorer/db.go @@ -29,7 +29,7 @@ type Validator struct { type Attestation struct { gorm.Model - ParticipantHashes []byte + ParticipantHashes []byte `gorm:"size:16384"` Signature []byte `gorm:"size:48"` Slot uint64 Shard uint64 @@ -73,7 +73,7 @@ type Assignment struct { gorm.Model Shard uint64 - CommitteeHashes []byte + CommitteeHashes []byte `gorm:"size:16384"` Slot uint64 } diff --git a/explorer/explorer.go b/explorer/explorer.go index a3a007fa..1caf293b 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -195,7 +195,8 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S for i := epochStart; i < epochStart+ex.config.appConfig.NetworkConfig.EpochLength; i++ { assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.appConfig.NetworkConfig) if err != nil { - panic(err) + logger.Errorf("%v", err) + continue } for _, as := range assignmentForSlot { @@ -227,12 +228,12 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S blockHash, err := ssz.HashTreeRoot(block) if err != nil { - panic(err) + logger.Errorf("%v", err) } proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber, ex.app.GetBlockchain().GetConfig()) if err != nil { - panic(err) + logger.Errorf("%v", err) } var idBytes [4]byte @@ -256,7 +257,8 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S for _, att := range block.BlockBody.Attestations { participants, err := state.GetAttestationParticipants(att.Data, att.ParticipationBitfield, ex.config.appConfig.NetworkConfig) if err != nil { - panic(err) + logger.Errorf("%v", err) + continue } participantHashes := make([][32]byte, len(participants)) From 594d68074d7c2be77e8cbf23a1810f9cae0248ce Mon Sep 17 00:00:00 2001 From: wqking Date: Wed, 9 Oct 2019 19:30:44 +0800 Subject: [PATCH 05/20] Fixed wrong slot number bug --- explorer/cmd/synapseexplorer.go | 4 ++-- explorer/explorer.go | 12 ++++++++---- primitives/state.go | 3 +++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/explorer/cmd/synapseexplorer.go b/explorer/cmd/synapseexplorer.go index cc38fa18..6c159d47 100644 --- a/explorer/cmd/synapseexplorer.go +++ b/explorer/cmd/synapseexplorer.go @@ -6,7 +6,7 @@ import ( _ "github.com/jinzhu/gorm/dialects/sqlite" "github.com/phoreproject/synapse/explorer" - "github.com/sirupsen/logrus" + logger "github.com/sirupsen/logrus" ) func main() { @@ -18,7 +18,7 @@ func main() { panic(err) } if changed { - logrus.Infof("changed ulimit to: %d", newLimit) + logger.Infof("changed ulimit to: %d", newLimit) } ex, err := explorer.NewExplorer(config) diff --git a/explorer/explorer.go b/explorer/explorer.go index 1caf293b..1a4033be 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -185,17 +185,19 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S var epochCount int - epochStart := state.Slot - (state.Slot % ex.config.appConfig.NetworkConfig.EpochLength) + epochLength := ex.config.appConfig.NetworkConfig.EpochLength + //epochStart := state.Slot - (state.Slot % epochLength) + epochStart := state.EpochIndex * epochLength ex.database.database.Model(&Epoch{}).Where(&Epoch{StartSlot: epochStart}).Count(&epochCount) if epochCount == 0 { var assignments []Assignment - for i := epochStart; i < epochStart+ex.config.appConfig.NetworkConfig.EpochLength; i++ { + for i := epochStart; i < epochStart+epochLength; i++ { assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.appConfig.NetworkConfig) if err != nil { - logger.Errorf("%v", err) + logger.Errorf("%v epochStart=%d", err, epochStart) continue } @@ -231,7 +233,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S logger.Errorf("%v", err) } - proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber, ex.app.GetBlockchain().GetConfig()) + proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber-1, ex.config.appConfig.NetworkConfig) if err != nil { logger.Errorf("%v", err) } @@ -297,6 +299,8 @@ func (ex *Explorer) exit() { // StartExplorer starts the block explorer func (ex *Explorer) StartExplorer() error { + logger.Info("StartExplorer 1") + signalHandler := make(chan os.Signal, 1) signal.Notify(signalHandler, os.Interrupt, syscall.SIGTERM) diff --git a/primitives/state.go b/primitives/state.go index c5b432fe..7fe835e6 100644 --- a/primitives/state.go +++ b/primitives/state.go @@ -3,6 +3,8 @@ package primitives import ( "bytes" "fmt" + "runtime/debug" + "github.com/prysmaticlabs/go-ssz" "github.com/pkg/errors" @@ -756,6 +758,7 @@ func (s *State) GetShardCommitteesAtSlot(slot uint64, c *config.Config) ([]Shard stateSlot := s.EpochIndex * c.EpochLength earliestSlot := int64(stateSlot) - int64(stateSlot%c.EpochLength) - int64(c.EpochLength) if int64(slot)-earliestSlot < 0 || int64(slot)-earliestSlot >= int64(len(s.ShardAndCommitteeForSlots)) { + debug.PrintStack() return nil, errors.WithStack(fmt.Errorf("could not get slot %d when state is at slot %d", slot, stateSlot)) } return s.ShardAndCommitteeForSlots[int64(slot)-earliestSlot], nil From ad7591ae590744e520e2f447519a00aaade4d137 Mon Sep 17 00:00:00 2001 From: wqking Date: Tue, 15 Oct 2019 15:20:28 +0800 Subject: [PATCH 06/20] Added shard data --- cfg/config.go | 3 +- explorer/config.go | 31 +++++++++++----- explorer/db.go | 14 ++++++++ explorer/explorer.go | 82 +++++++++++++++++++++++++++++++++--------- shard/chain/manager.go | 1 + shard/chain/mux.go | 17 ++++++++- shard/module/app.go | 6 ++-- shard/rpc/server.go | 3 +- 8 files changed, 127 insertions(+), 30 deletions(-) diff --git a/cfg/config.go b/cfg/config.go index df58b674..7219b242 100644 --- a/cfg/config.go +++ b/cfg/config.go @@ -3,10 +3,11 @@ package cfg import ( "flag" "fmt" - "gopkg.in/yaml.v2" "io/ioutil" "reflect" "strings" + + "gopkg.in/yaml.v2" ) type argInfo struct { diff --git a/explorer/config.go b/explorer/config.go index f40e2edb..216cdd06 100644 --- a/explorer/config.go +++ b/explorer/config.go @@ -6,8 +6,9 @@ import ( "os" "strings" - "github.com/phoreproject/synapse/beacon/module" + beaconModule "github.com/phoreproject/synapse/beacon/module" "github.com/phoreproject/synapse/p2p" + shardConfig "github.com/phoreproject/synapse/shard/config" ) // Config is the explorer config @@ -24,10 +25,14 @@ type Config struct { DataDir string `json:"datadir,omitempty"` Connect string `json:"connect,omitempty"` Listen string `json:"listen,omitempty"` + RPCListen string `json:"rpclisten,omitempty"` + + ShardListen string `json:"shardlisten,omitempty"` Level string `json:"level,omitempty"` - appConfig *module.Config + beaconConfig *beaconModule.Config + shardConfig *shardConfig.Options } func newConfig() *Config { @@ -62,6 +67,8 @@ func loadConfigFromCommandLine(config *Config) { datadir := flag.String("datadir", "", "location to store blockchain data") connect := flag.String("connect", "", "comma separated multiaddrs") listen := flag.String("listen", "/ip4/0.0.0.0/tcp/11781", "specifies the address to listen on") + rpcListen := flag.String("rpclisten", "/ip4/0.0.0.0/tcp/11781", "specifies the address to RPC listen on") + shardListen := flag.String("shardlisten", "/ip4/0.0.0.0/tcp/11781", "specifies the address to listen on") level := flag.String("level", "info", "log level") flag.Parse() @@ -78,7 +85,10 @@ func loadConfigFromCommandLine(config *Config) { config.DataDir = *datadir config.Connect = *connect config.Listen = *listen + config.RPCListen = *rpcListen config.Level = *level + + config.ShardListen = *shardListen } func isFlagPassed(name string) bool { @@ -155,7 +165,7 @@ func prepareConfig(config *Config) { panic(err) } - appConfig, err := module.ReadChainFileToConfig(f) + beaconConfig, err := beaconModule.ReadChainFileToConfig(f) if err != nil { panic(err) } @@ -165,15 +175,20 @@ func prepareConfig(config *Config) { panic(err) } - appConfig.DataDirectory = config.DataDir - appConfig.Resync = config.Resync - appConfig.ListeningAddress = config.Listen + beaconConfig.DataDirectory = config.DataDir + beaconConfig.Resync = config.Resync + beaconConfig.ListeningAddress = config.Listen initialPeers, err := p2p.ParseInitialConnections(strings.Split(config.Connect, ",")) if err != nil { panic(err) } - appConfig.DiscoveryOptions.PeerAddresses = append(appConfig.DiscoveryOptions.PeerAddresses, initialPeers...) + beaconConfig.DiscoveryOptions.PeerAddresses = append(beaconConfig.DiscoveryOptions.PeerAddresses, initialPeers...) - config.appConfig = appConfig + config.beaconConfig = beaconConfig + + config.shardConfig = &shardConfig.Options{ + RPCListen: config.ShardListen, + BeaconRPC: config.RPCListen, + } } diff --git a/explorer/db.go b/explorer/db.go index 23cd98e7..b9e3e5e7 100644 --- a/explorer/db.go +++ b/explorer/db.go @@ -85,6 +85,16 @@ type Epoch struct { Committees []Assignment } +// Shard is the shard information +type Shard struct { + gorm.Model + + ShardID uint64 + RootBlockHash []byte `gorm:"size:32"` + RootSlot uint64 + GenesisTime uint64 +} + // Database is the database used to store information about the blockchain. type Database struct { database *gorm.DB @@ -119,5 +129,9 @@ func NewDatabase(db *gorm.DB) *Database { panic(err) } + if err := db.AutoMigrate(&Shard{}).Error; err != nil { + panic(err) + } + return &Database{db} } diff --git a/explorer/explorer.go b/explorer/explorer.go index 1a4033be..b9723330 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -21,7 +21,9 @@ import ( _ "github.com/jinzhu/gorm/dialects/sqlite" "github.com/phoreproject/synapse/beacon/config" - "github.com/phoreproject/synapse/beacon/module" + beaconModule "github.com/phoreproject/synapse/beacon/module" + shardChain "github.com/phoreproject/synapse/shard/chain" + shardModule "github.com/phoreproject/synapse/shard/module" logger "github.com/sirupsen/logrus" ) @@ -30,7 +32,8 @@ import ( // and then keeps track of its own blockchain so that it can access more // info like forking. type Explorer struct { - app *module.BeaconApp + beaconApp *beaconModule.BeaconApp + shardApp *shardModule.ShardApp config *Config @@ -86,20 +89,26 @@ func NewExplorer(c *Config) (*Explorer, error) { beaconConfig.Resync = c.Resync beaconConfig.ChainCFG = c.ChainConfig beaconConfig.DataDir = c.DataDir - beaconConfig.GenesisTime = strconv.FormatUint(c.appConfig.GenesisTime, 10) + beaconConfig.GenesisTime = strconv.FormatUint(c.beaconConfig.GenesisTime, 10) beaconConfig.InitialConnections = strings.Split(c.Connect, ",") beaconConfig.P2PListen = c.Listen beaconConfig.RPCListen = c.Listen - app, err := module.NewBeaconApp(beaconConfig) + beaconApp, err := beaconModule.NewBeaconApp(beaconConfig) + if err != nil { + panic(err) + } + + shardApp, err := shardModule.NewShardApp(*c.shardConfig) if err != nil { panic(err) } ex := &Explorer{ - app: app, - db: db, - database: NewDatabase(db), - config: c, + beaconApp: beaconApp, + shardApp: shardApp, + db: db, + database: NewDatabase(db), + config: c, } lvl, err := logger.ParseLevel(c.Level) if err != nil { @@ -112,7 +121,7 @@ func NewExplorer(c *Config) (*Explorer, error) { // WaitForConnections waits until beacon app is connected func (ex *Explorer) WaitForConnections(numConnections int) { for { - if ex.app.GetHostNode().PeersConnected() >= numConnections { + if ex.beaconApp.GetHostNode().PeersConnected() >= numConnections { break } time.Sleep(100 * time.Millisecond) @@ -185,7 +194,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S var epochCount int - epochLength := ex.config.appConfig.NetworkConfig.EpochLength + epochLength := ex.config.beaconConfig.NetworkConfig.EpochLength //epochStart := state.Slot - (state.Slot % epochLength) epochStart := state.EpochIndex * epochLength @@ -195,7 +204,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S var assignments []Assignment for i := epochStart; i < epochStart+epochLength; i++ { - assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.appConfig.NetworkConfig) + assignmentForSlot, err := state.GetShardCommitteesAtSlot(i, ex.config.beaconConfig.NetworkConfig) if err != nil { logger.Errorf("%v epochStart=%d", err, epochStart) continue @@ -233,7 +242,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S logger.Errorf("%v", err) } - proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber-1, ex.config.appConfig.NetworkConfig) + proposerIdx, err := state.GetBeaconProposerIndex(block.BlockHeader.SlotNumber-1, ex.config.beaconConfig.NetworkConfig) if err != nil { logger.Errorf("%v", err) } @@ -257,7 +266,7 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S // Update attestations for _, att := range block.BlockBody.Attestations { - participants, err := state.GetAttestationParticipants(att.Data, att.ParticipationBitfield, ex.config.appConfig.NetworkConfig) + participants, err := state.GetAttestationParticipants(att.Data, att.ParticipationBitfield, ex.config.beaconConfig.NetworkConfig) if err != nil { logger.Errorf("%v", err) continue @@ -291,8 +300,44 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S } } +func (ex *Explorer) doProcessSingleShard(shardManager *shardChain.ShardManager) { + var shardCount int + ex.database.database.Model(&Shard{}).Where(&Shard{ShardID: shardManager.ShardID}).Count(&shardCount) + if shardCount == 0 { + ex.database.database.Create(&Shard{ + ShardID: shardManager.ShardID, + RootBlockHash: shardManager.InitializationParameters.RootBlockHash.CloneBytes(), + RootSlot: shardManager.InitializationParameters.RootSlot, + GenesisTime: shardManager.InitializationParameters.GenesisTime, + }) + } +} + +func (ex *Explorer) doProcessShards() { + mux := ex.shardApp.Mux + if mux == nil { + return + } + + shardIDList := mux.GetShardIDList() + for _, shardID := range shardIDList { + shardManager, _ := mux.GetManager(shardID) + if shardManager == nil { + continue + } + ex.doProcessSingleShard(shardManager) + } +} + +func (ex *Explorer) processShards() { + for { + ex.doProcessShards() + time.Sleep(5) + } +} + func (ex *Explorer) exit() { - ex.app.Exit() + ex.beaconApp.Exit() os.Exit(0) } @@ -310,11 +355,14 @@ func (ex *Explorer) StartExplorer() error { ex.exit() }() - ex.app.GetSyncManager().RegisterPostProcessHook(ex.postProcessHook) + ex.beaconApp.GetSyncManager().RegisterPostProcessHook(ex.postProcessHook) - logger.Info("Ready to run.") + go ex.processShards() - ex.app.Run() + logger.Info("Start shard chains.") + ex.shardApp.Run() + logger.Info("Start Beacon chain.") + ex.beaconApp.Run() return nil } diff --git a/shard/chain/manager.go b/shard/chain/manager.go index 12e35a82..b87a3f29 100644 --- a/shard/chain/manager.go +++ b/shard/chain/manager.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/phoreproject/synapse/beacon/config" "github.com/phoreproject/synapse/bls" "github.com/phoreproject/synapse/chainhash" diff --git a/shard/chain/mux.go b/shard/chain/mux.go index 06f3cd50..156f09f7 100644 --- a/shard/chain/mux.go +++ b/shard/chain/mux.go @@ -2,8 +2,9 @@ package chain import ( "fmt" - "github.com/phoreproject/synapse/pb" "sync" + + "github.com/phoreproject/synapse/pb" ) // ShardMux handles the various different blockchains associated with different shards. @@ -55,3 +56,17 @@ func (sm *ShardMux) GetManager(shardID uint64) (*ShardManager, error) { } return manager, nil } + +// GetShardIDList gets the shards ID list. It's useful to enumerate all shards +func (sm *ShardMux) GetShardIDList() []uint64 { + shardIDList := []uint64{} + + sm.lock.RLock() + defer sm.lock.RUnlock() + + for k := range sm.managers { + shardIDList = append(shardIDList, k) + } + + return shardIDList +} diff --git a/shard/module/app.go b/shard/module/app.go index b8c55f1c..076757cc 100644 --- a/shard/module/app.go +++ b/shard/module/app.go @@ -2,6 +2,7 @@ package module import ( "fmt" + "github.com/multiformats/go-multiaddr" manet "github.com/multiformats/go-multiaddr-net" "github.com/phoreproject/synapse/pb" @@ -19,6 +20,7 @@ const shardExecutionVersion = "0.0.1" type ShardApp struct { Config config.ShardConfig RPC rpc.ShardRPCServer + Mux *chain.ShardMux } // NewShardApp creates a new shard app given a config. @@ -60,11 +62,11 @@ func (s *ShardApp) Run() error { client := pb.NewBlockchainRPCClient(s.Config.BeaconConn) - mux := chain.NewShardMux(client) + s.Mux = chain.NewShardMux(client) logger.Infof("starting RPC server on %s with protocol %s", s.Config.RPCAddress, s.Config.RPCProtocol) - err := rpc.Serve(s.Config.RPCProtocol, s.Config.RPCAddress, mux) + err := rpc.Serve(s.Config.RPCProtocol, s.Config.RPCAddress, s.Mux) return err } diff --git a/shard/rpc/server.go b/shard/rpc/server.go index 275a322d..0ca50e92 100644 --- a/shard/rpc/server.go +++ b/shard/rpc/server.go @@ -2,6 +2,8 @@ package rpc import ( "context" + "net" + "github.com/golang/protobuf/ptypes/empty" "github.com/phoreproject/synapse/chainhash" "github.com/phoreproject/synapse/pb" @@ -10,7 +12,6 @@ import ( "github.com/prysmaticlabs/go-ssz" "google.golang.org/grpc" "google.golang.org/grpc/reflection" - "net" ) // ShardRPCServer handles incoming commands for the shard module. From 4330aa2c9f856195c5ee769d4d27dd8235a4cde9 Mon Sep 17 00:00:00 2001 From: wqking Date: Wed, 16 Oct 2019 16:42:02 +0800 Subject: [PATCH 07/20] Added shards web page --- .../src/controllers/shardcontroller.js | 25 ++++++++ explorer/website/backend/src/routes.js | 7 +++ .../website/frontend/views/pages/home.hbs | 3 + .../website/frontend/views/pages/shards.hbs | 2 + .../frontend/views/partials/shardtable.hbs | 62 +++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 explorer/website/backend/src/controllers/shardcontroller.js create mode 100644 explorer/website/frontend/views/pages/shards.hbs create mode 100644 explorer/website/frontend/views/partials/shardtable.hbs diff --git a/explorer/website/backend/src/controllers/shardcontroller.js b/explorer/website/backend/src/controllers/shardcontroller.js new file mode 100644 index 00000000..9187aa6f --- /dev/null +++ b/explorer/website/backend/src/controllers/shardcontroller.js @@ -0,0 +1,25 @@ +const Controller = require('./controller').Controller; +const util = require('../util'); + +class ShardController extends Controller { + constructor() { + super(); + } + + getShards(request, response) { + let urlQueries = request.query; + let query = this.getDatabase().select().from('shards'); + if(urlQueries.i) { + query = query.offset(parseInt(urlQueries.i)); + } + if(urlQueries.c) { + query = query.limit(parseInt(urlQueries.c)); + } + query.then(function(shardList) { + response.json(util.bufferFieldsToHex(shardList)); + }); + } + +} + +module.exports = { ShardController: ShardController }; diff --git a/explorer/website/backend/src/routes.js b/explorer/website/backend/src/routes.js index b80373f8..e25b5012 100644 --- a/explorer/website/backend/src/routes.js +++ b/explorer/website/backend/src/routes.js @@ -3,6 +3,7 @@ const bodyParser = require('body-parser'); const BlockController = require('./controllers/blockcontroller').BlockController; const TransactionController = require('./controllers/transactioncontroller').TransactionController; const ValidatorController = require('./controllers/validatorcontroller').ValidatorController; +const ShardController = require('./controllers/shardcontroller').ShardController; function initializeRoutes(application) { const _c = function(controllerClass, functionName) { @@ -28,6 +29,10 @@ function initializeRoutes(application) { response.render('pages/validators', { title: 'Validator page' }); }); + express.get('/shards', (request, response) => { + response.render('pages/shards', { title: 'Shard page' }); + }); + express.get('/block', _c(BlockController, 'viewBlockDetail')); express.get('/api/blocks', _c(BlockController, 'getBlocks')); @@ -38,6 +43,8 @@ function initializeRoutes(application) { express.get('/api/validators', _c(ValidatorController, 'getValidators')); express.get('/api/validators/:hash', _c(ValidatorController, 'getValidator')); + + express.get('/api/shards', _c(ShardController, 'getShards')); } module.exports = { initializeRoutes: initializeRoutes }; diff --git a/explorer/website/frontend/views/pages/home.hbs b/explorer/website/frontend/views/pages/home.hbs index 23a6f451..3a11f8c8 100644 --- a/explorer/website/frontend/views/pages/home.hbs +++ b/explorer/website/frontend/views/pages/home.hbs @@ -1,6 +1,9 @@ +
+Shards +





{{> blocktable }} diff --git a/explorer/website/frontend/views/pages/shards.hbs b/explorer/website/frontend/views/pages/shards.hbs new file mode 100644 index 00000000..de98cc70 --- /dev/null +++ b/explorer/website/frontend/views/pages/shards.hbs @@ -0,0 +1,2 @@ +{{> shardtable }} + diff --git a/explorer/website/frontend/views/partials/shardtable.hbs b/explorer/website/frontend/views/partials/shardtable.hbs new file mode 100644 index 00000000..4d95ecb0 --- /dev/null +++ b/explorer/website/frontend/views/partials/shardtable.hbs @@ -0,0 +1,62 @@ +
+ + + + + + + + + + + +
IDShard IDHashRoot SlotGenesis
+ +
+ + From 0e93243833123db691b6bfef822f84d774f37fe8 Mon Sep 17 00:00:00 2001 From: wqking Date: Tue, 22 Oct 2019 08:53:53 +0800 Subject: [PATCH 08/20] Added multilingual support --- explorer/website/backend/package-lock.json | 267 ++++++++++++++++++ explorer/website/backend/package.json | 2 + explorer/website/backend/src/application.js | 14 + explorer/website/backend/src/locales/de.json | 3 + explorer/website/backend/src/locales/en.json | 3 + explorer/website/backend/src/routes.js | 4 + .../website/backend/src/templatehelpers.js | 1 + .../website/frontend/views/pages/home.hbs | 1 + 8 files changed, 295 insertions(+) create mode 100644 explorer/website/backend/src/locales/de.json create mode 100644 explorer/website/backend/src/locales/en.json diff --git a/explorer/website/backend/package-lock.json b/explorer/website/backend/package-lock.json index 89b75f6a..66a1268e 100644 --- a/explorer/website/backend/package-lock.json +++ b/explorer/website/backend/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -13,6 +18,36 @@ "negotiator": "0.6.2" } }, + "ambi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", + "integrity": "sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA=", + "requires": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + }, + "dependencies": { + "typechecker": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz", + "integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==", + "requires": { + "editions": "^2.1.0" + }, + "dependencies": { + "editions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.2.0.tgz", + "integrity": "sha512-RYg3iEA2BDLCNVe8PUkD+ox5vAKxB9XS/mAhx1bdxGCF0CpX077C0pyTA9t5D6idCYA3avl5/XDHKPsHFrygfw==", + "requires": { + "errlop": "^1.1.2", + "semver": "^6.3.0" + } + } + } + } + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -58,6 +93,11 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -283,6 +323,22 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" }, + "cookie-parser": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz", + "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + } + } + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -293,6 +349,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "csextends": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz", + "integrity": "sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -371,6 +432,19 @@ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" }, + "eachr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-2.0.4.tgz", + "integrity": "sha1-Rm98qhBwj2EFCeMsgHqv5X/BIr8=", + "requires": { + "typechecker": "^2.0.8" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -381,6 +455,25 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "errlop": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.2.tgz", + "integrity": "sha512-djkRp+urJ+SmqDBd7F6LUgm4Be1TTYBxia2bhjNdFBuBDQtJDHExD2VbxR6eyst3h1TZy3qPRCdqb6FBoFttTA==", + "requires": { + "editions": "^2.1.3" + }, + "dependencies": { + "editions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.2.0.tgz", + "integrity": "sha512-RYg3iEA2BDLCNVe8PUkD+ox5vAKxB9XS/mAhx1bdxGCF0CpX077C0pyTA9t5D6idCYA3avl5/XDHKPsHFrygfw==", + "requires": { + "errlop": "^1.1.2", + "semver": "^6.3.0" + } + } + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -504,6 +597,21 @@ } } }, + "extendr": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/extendr/-/extendr-2.1.0.tgz", + "integrity": "sha1-MBqgu+pWX00tyPVw8qImEahSe1Y=", + "requires": { + "typechecker": "~2.0.1" + }, + "dependencies": { + "typechecker": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.0.8.tgz", + "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4=" + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -563,6 +671,21 @@ } } }, + "extract-opts": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-2.2.0.tgz", + "integrity": "sha1-H6KOunNSxttID4hc63GkaBC+bX0=", + "requires": { + "typechecker": "~2.0.1" + }, + "dependencies": { + "typechecker": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.0.8.tgz", + "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4=" + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -797,6 +920,19 @@ "toidentifier": "1.0.0" } }, + "i18n": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.3.tgz", + "integrity": "sha1-LYzxwkciYCwgQdAbpq5eqlE4jw4=", + "requires": { + "debug": "*", + "make-plural": "^3.0.3", + "math-interval-parser": "^1.1.0", + "messageformat": "^0.3.1", + "mustache": "*", + "sprintf-js": ">=1.0.3" + } + }, "iconv-lite": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", @@ -805,6 +941,20 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignorefs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.2.0.tgz", + "integrity": "sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y=", + "requires": { + "editions": "^1.3.3", + "ignorepatterns": "^1.1.0" + } + }, + "ignorepatterns": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.1.0.tgz", + "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1082,6 +1232,14 @@ "kind-of": "^6.0.2" } }, + "make-plural": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz", + "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=", + "requires": { + "minimist": "^1.2.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -1095,6 +1253,14 @@ "object-visit": "^1.0.0" } }, + "math-interval-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz", + "integrity": "sha1-2+2lsGsySZc8bfYXD94jhvCv2JM=", + "requires": { + "xregexp": "^2.0.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1105,6 +1271,32 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "messageformat": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-0.3.1.tgz", + "integrity": "sha1-5Y//gkXps5cXmeW0PbWLPpQX9aI=", + "requires": { + "async": "~1.5.2", + "glob": "~6.0.4", + "make-plural": "~3.0.3", + "nopt": "~3.0.6", + "watchr": "~2.4.13" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -1200,6 +1392,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mustache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.1.0.tgz", + "integrity": "sha512-3Bxq1R5LBZp7fbFPZzFe5WN4s0q3+gxZaZuZVY+QctYJiCiVgXHOTIC0/HgZuOPFt/6BQcx5u0H2CUOxT/RoGQ==" + }, "mysql2": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", @@ -1267,6 +1464,14 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -1562,11 +1767,34 @@ "ret": "~0.1.10" } }, + "safefs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", + "integrity": "sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw=", + "requires": { + "graceful-fs": "*" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, + "scandirectory": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", + "integrity": "sha1-bOA/VKCQtmjjy+2/IO354xBZPnI=", + "requires": { + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "taskgroup": "^4.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -1763,6 +1991,11 @@ "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", @@ -1797,6 +2030,15 @@ "resolved": "https://registry.npmjs.org/tarn/-/tarn-2.0.0.tgz", "integrity": "sha1-xoSZ9piB+ZrpVbQxfKfSEtlC/e4=" }, + "taskgroup": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", + "integrity": "sha1-feGT/r12gnPEV3MElwJNUSwnkVo=", + "requires": { + "ambi": "^2.2.0", + "csextends": "^1.0.3" + } + }, "tildify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", @@ -1854,6 +2096,11 @@ "mime-types": "~2.1.24" } }, + "typechecker": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.1.0.tgz", + "integrity": "sha1-0cIJOlT/ihn1jP+HfuqlTyJC04M=" + }, "uglify-js": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", @@ -1968,6 +2215,21 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "watchr": { + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.4.13.tgz", + "integrity": "sha1-10hHu01vkPYf4sdPn2hmKqDgdgE=", + "requires": { + "eachr": "^2.0.2", + "extendr": "^2.1.0", + "extract-opts": "^2.2.0", + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "scandirectory": "^2.5.0", + "taskgroup": "^4.2.0", + "typechecker": "^2.0.8" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -1986,6 +2248,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", diff --git a/explorer/website/backend/package.json b/explorer/website/backend/package.json index e1284148..e930c609 100644 --- a/explorer/website/backend/package.json +++ b/explorer/website/backend/package.json @@ -12,8 +12,10 @@ "dependencies": { "body-parser": "^1.19.0", "config": "^3.2.2", + "cookie-parser": "^1.4.4", "express": "^4.17.1", "express-handlebars": "^3.1.0", + "i18n": "^0.8.3", "knex": "^0.19.4", "mysql2": "^1.7.0" } diff --git a/explorer/website/backend/src/application.js b/explorer/website/backend/src/application.js index 91f898a4..fe11af33 100644 --- a/explorer/website/backend/src/application.js +++ b/explorer/website/backend/src/application.js @@ -4,6 +4,7 @@ class Application { constructor() { this.expressClass = require('express'); this.express = this.expressClass(); + this.lang = require("i18n"); this.config = require('config'); this.frontEndPath = __dirname + '/../../frontend'; @@ -51,6 +52,10 @@ class Application { return this.frontEndPath + '/views' + path; } + getLang() { + return this.lang; + } + initialize() { this.doInitializeDatabase(); this.doInitializeTemplateEngine(); @@ -87,6 +92,15 @@ class Application { partialsDir: viewDirName + '/partials/' })); + this.lang.configure({ + // default to en + locales: [ 'en', 'de' ], + cookie: 'synapselocals', + directory: __dirname + '/locales' + }); + this.express.use(require('cookie-parser')()); + this.express.use(this.lang.init); + require('./templatehelpers').initializeTemplateHelpers(this); } diff --git a/explorer/website/backend/src/locales/de.json b/explorer/website/backend/src/locales/de.json new file mode 100644 index 00000000..131fe02f --- /dev/null +++ b/explorer/website/backend/src/locales/de.json @@ -0,0 +1,3 @@ +{ + "test" : "This is a text in Germany" +} diff --git a/explorer/website/backend/src/locales/en.json b/explorer/website/backend/src/locales/en.json new file mode 100644 index 00000000..f093ce4c --- /dev/null +++ b/explorer/website/backend/src/locales/en.json @@ -0,0 +1,3 @@ +{ + "test" : "This is a text in English" +} diff --git a/explorer/website/backend/src/routes.js b/explorer/website/backend/src/routes.js index e25b5012..ad89e052 100644 --- a/explorer/website/backend/src/routes.js +++ b/explorer/website/backend/src/routes.js @@ -45,6 +45,10 @@ function initializeRoutes(application) { express.get('/api/validators/:hash', _c(ValidatorController, 'getValidator')); express.get('/api/shards', _c(ShardController, 'getShards')); + + express.get('/test', function (req, res) { + res.send(res.__('test')); + }); } module.exports = { initializeRoutes: initializeRoutes }; diff --git a/explorer/website/backend/src/templatehelpers.js b/explorer/website/backend/src/templatehelpers.js index e6f4acd0..bbae6b9b 100644 --- a/explorer/website/backend/src/templatehelpers.js +++ b/explorer/website/backend/src/templatehelpers.js @@ -21,6 +21,7 @@ function registerHelpers(application) Handlebars.registerHelper("url", function(url) { return url; }); + Handlebars.registerHelper("__", application.getLang().__); } function initializeTemplateHelpers(application) diff --git a/explorer/website/frontend/views/pages/home.hbs b/explorer/website/frontend/views/pages/home.hbs index 3a11f8c8..6fd4f3fa 100644 --- a/explorer/website/frontend/views/pages/home.hbs +++ b/explorer/website/frontend/views/pages/home.hbs @@ -1,3 +1,4 @@ +

{{ __ 'test' }}

From 5ac56f8a684074dd472831ecfcfa78a44114af1b Mon Sep 17 00:00:00 2001 From: wqking Date: Wed, 23 Oct 2019 16:26:52 +0800 Subject: [PATCH 09/20] Added shard block information in explorer --- explorer/db.go | 15 +++++++++++++++ explorer/explorer.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/explorer/db.go b/explorer/db.go index b9e3e5e7..f0863ce4 100644 --- a/explorer/db.go +++ b/explorer/db.go @@ -95,6 +95,17 @@ type Shard struct { GenesisTime uint64 } +// ShardBlock is the shard block information +type ShardBlock struct { + gorm.Model + + ShardID uint64 + BlockHash []byte `gorm:"size:32"` + StateRootHash []byte `gorm:"size:32"` + Slot uint64 + Height uint64 +} + // Database is the database used to store information about the blockchain. type Database struct { database *gorm.DB @@ -133,5 +144,9 @@ func NewDatabase(db *gorm.DB) *Database { panic(err) } + if err := db.AutoMigrate(&ShardBlock{}).Error; err != nil { + panic(err) + } + return &Database{db} } diff --git a/explorer/explorer.go b/explorer/explorer.go index b9723330..6ce746ee 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -300,6 +300,36 @@ func (ex *Explorer) postProcessHook(block *primitives.Block, state *primitives.S } } +func (ex *Explorer) doProcessShardBlocks(shardManager *shardChain.ShardManager) { + chain := shardManager.Chain + tip, _ := chain.Tip() + if tip == nil { + return + } + currentSlot := tip.Slot + for { + var foundSlotCount int + ex.database.database.Model(&ShardBlock{}).Where(&ShardBlock{ShardID: shardManager.ShardID, Slot: currentSlot}).Count(&foundSlotCount) + if foundSlotCount != 0 { + break + } + + block, _ := chain.GetNodeBySlot(currentSlot) + if block == nil { + break + } + ex.database.database.Create(&ShardBlock{ + ShardID: shardManager.ShardID, + BlockHash: block.BlockHash[:], + StateRootHash: block.StateRoot[:], + Slot: block.Slot, + Height: block.Height, + }) + + currentSlot-- + } +} + func (ex *Explorer) doProcessSingleShard(shardManager *shardChain.ShardManager) { var shardCount int ex.database.database.Model(&Shard{}).Where(&Shard{ShardID: shardManager.ShardID}).Count(&shardCount) @@ -311,6 +341,8 @@ func (ex *Explorer) doProcessSingleShard(shardManager *shardChain.ShardManager) GenesisTime: shardManager.InitializationParameters.GenesisTime, }) } + + ex.doProcessShardBlocks(shardManager) } func (ex *Explorer) doProcessShards() { From 669790255799b737181ba10406dde8d336240a4d Mon Sep 17 00:00:00 2001 From: wqking Date: Sun, 3 Nov 2019 09:45:19 +0800 Subject: [PATCH 10/20] Added memory profiling (disabled for now). --- beacon/statemanager.go | 7 ++++++- cmd/beacon/synapsebeacon.go | 11 +++++++++++ explorer/explorer.go | 8 ++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/beacon/statemanager.go b/beacon/statemanager.go index 560c8e76..87b36e98 100644 --- a/beacon/statemanager.go +++ b/beacon/statemanager.go @@ -11,6 +11,7 @@ import ( "github.com/phoreproject/synapse/chainhash" "github.com/phoreproject/synapse/primitives" "github.com/prysmaticlabs/go-ssz" + logger "github.com/sirupsen/logrus" ) type stateDerivedFromBlock struct { @@ -125,7 +126,11 @@ func (sm *StateManager) GetStateForHashAtSlot(blockHash chainhash.Hash, slot uin return nil, nil, fmt.Errorf("could not find state for block %s", blockHash) } - return derivedState.deriveState(slot, view, c) + receipts, state, err := derivedState.deriveState(slot, view, c) + + logger.Debugf("derivedState.lastSlotReceipts length: %d for block: %s\n", len(derivedState.lastSlotReceipts), blockHash.String()) + + return receipts, state, err } // SetBlockState sets the state for a certain block. This SHOULD ONLY diff --git a/cmd/beacon/synapsebeacon.go b/cmd/beacon/synapsebeacon.go index dfee52a8..3e2d558f 100644 --- a/cmd/beacon/synapsebeacon.go +++ b/cmd/beacon/synapsebeacon.go @@ -6,9 +6,20 @@ import ( "github.com/phoreproject/synapse/cfg" "github.com/phoreproject/synapse/utils" logger "github.com/sirupsen/logrus" + /* + Uncomment to enable memory profiling. To use it, run synapsebeacon, then + curl -sK -v http://localhost:9000/debug/pprof/heap > heap + go tool pprof heap + or to see all allocated memory + go tool pprof --alloc_space heap + in go pprof, use 'top' command to see the top memory usage + *///"net/http" + //_ "net/http/pprof" ) func main() { + //go http.ListenAndServe("localhost:9000", nil) + beaconConfig := config.Options{} globalConfig := cfg.GlobalOptions{} err := cfg.LoadFlags(&beaconConfig, &globalConfig) diff --git a/explorer/explorer.go b/explorer/explorer.go index 6ce746ee..66d97d06 100644 --- a/explorer/explorer.go +++ b/explorer/explorer.go @@ -393,6 +393,14 @@ func (ex *Explorer) StartExplorer() error { logger.Info("Start shard chains.") ex.shardApp.Run() + + // temp + rootHash, _ := chainhash.NewHashFromStr("4b511a3448fd23a25f81eecfde8d0ef9747e3f4d183cba6a16ec4bd893930d60") + ex.shardApp.Mux.StartManaging(1, shardChain.ShardChainInitializationParameters{ + RootBlockHash: *rootHash, + RootSlot: 1, + }) + logger.Info("Start Beacon chain.") ex.beaconApp.Run() From 7d1b61d2b9319c969ca43870714e359e95d7c4d7 Mon Sep 17 00:00:00 2001 From: wqking Date: Thu, 7 Nov 2019 08:56:45 +0800 Subject: [PATCH 11/20] Added block age limitation to reduce memory usage --- beacon/rpc/rpc.go | 8 +++++++- beacon/state.go | 5 +++++ primitives/state.go | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/beacon/rpc/rpc.go b/beacon/rpc/rpc.go index 136274d3..c3a506c7 100644 --- a/beacon/rpc/rpc.go +++ b/beacon/rpc/rpc.go @@ -1,10 +1,12 @@ package rpc import ( + "errors" "fmt" - "github.com/prysmaticlabs/go-ssz" "net" + "github.com/prysmaticlabs/go-ssz" + "github.com/phoreproject/synapse/p2p" "github.com/phoreproject/synapse/utils" @@ -176,6 +178,10 @@ func (s *server) GetEpochInformation(ctx context.Context, in *pb.EpochInformatio state := s.chain.GetState() config := s.chain.GetConfig() + if in.EpochIndex < s.chain.GetCurrentSlot()/s.chain.GetConfig().EpochLength-3 { + return nil, errors.New("Epoch is too old") + } + requestedEpochSlot := uint64(in.EpochIndex) * s.chain.GetConfig().EpochLength if requestedEpochSlot > state.Slot { diff --git a/beacon/state.go b/beacon/state.go index d538e9bc..55e55d28 100644 --- a/beacon/state.go +++ b/beacon/state.go @@ -76,6 +76,11 @@ func (b *Blockchain) ProcessBlock(block *primitives.Block, checkTime bool, verif initialJustifiedEpoch := initialState.JustifiedEpoch initialFinalizedEpoch := initialState.FinalizedEpoch + if (block.BlockHeader.SlotNumber+(b.config.EpochLength-1))/b.config.EpochLength >= initialState.EpochIndex+3 { + logger.Debugf("block epoch is too far from parent") + return nil, nil, errors.New("block epoch is too far from parent") + } + receipts, newState, err := b.AddBlockToStateMap(block, verifySignature) if err != nil { return nil, nil, err diff --git a/primitives/state.go b/primitives/state.go index 7fe835e6..0632cee6 100644 --- a/primitives/state.go +++ b/primitives/state.go @@ -3,7 +3,6 @@ package primitives import ( "bytes" "fmt" - "runtime/debug" "github.com/prysmaticlabs/go-ssz" @@ -758,7 +757,6 @@ func (s *State) GetShardCommitteesAtSlot(slot uint64, c *config.Config) ([]Shard stateSlot := s.EpochIndex * c.EpochLength earliestSlot := int64(stateSlot) - int64(stateSlot%c.EpochLength) - int64(c.EpochLength) if int64(slot)-earliestSlot < 0 || int64(slot)-earliestSlot >= int64(len(s.ShardAndCommitteeForSlots)) { - debug.PrintStack() return nil, errors.WithStack(fmt.Errorf("could not get slot %d when state is at slot %d", slot, stateSlot)) } return s.ShardAndCommitteeForSlots[int64(slot)-earliestSlot], nil @@ -1153,6 +1151,8 @@ type BlockView interface { func (s *State) ProcessSlots(upTo uint64, view BlockView, c *config.Config) ([]Receipt, error) { var receipts []Receipt + //initialSlot := s.Slot + for s.Slot < upTo { // this only happens when there wasn't a block at the first slot of the epoch if s.Slot/c.EpochLength > s.EpochIndex && s.Slot%c.EpochLength == 0 { @@ -1161,6 +1161,7 @@ func (s *State) ProcessSlots(upTo uint64, view BlockView, c *config.Config) ([]R return nil, err } + //fmt.Printf("ProcessSlots..., ProcessEpochTransition lenOfEpochReceipts=%d s.Slot=%d c.EpochLength=%d\n", len(epochReceipts), s.Slot, c.EpochLength) receipts = append(receipts, epochReceipts...) } @@ -1177,5 +1178,34 @@ func (s *State) ProcessSlots(upTo uint64, view BlockView, c *config.Config) ([]R view.SetTipSlot(s.Slot) } + /* stats code for test the memory usage, will remove it after we fix the memory usage. + statsMap := map[uint32]uint32{} + for _, r := range receipts { + index := r.Index + _, found := statsMap[index] + if found { + statsMap[index]++ + } else { + statsMap[index] = 1 + } + } + validatorCount := uint32(0) + maxDuplicatedCount := uint32(0) + minDuplicatedCount := uint32(99999999) + for _, v := range statsMap { + validatorCount++ + if v > maxDuplicatedCount { + maxDuplicatedCount = v + } + if v < minDuplicatedCount { + minDuplicatedCount = v + } + } + + //fmt.Printf("ProcessSlots s.Slot=%d upTo=%d lenOfReceipts=%d validatorCount=%d maxDuplicatedCount=%d minDuplicatedCount=%d, below is the stack trace\n", + // initialSlot, upTo, len(receipts), validatorCount, maxDuplicatedCount, minDuplicatedCount) + //debug.PrintStack() + */ + return receipts, nil } From a198b054b57fb77726ff431b500da03ff44b9770 Mon Sep 17 00:00:00 2001 From: wqking Date: Fri, 15 Nov 2019 10:07:02 +0800 Subject: [PATCH 12/20] Fixed wrong inequation --- beacon/rpc/rpc.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/beacon/rpc/rpc.go b/beacon/rpc/rpc.go index c3a506c7..115f55e0 100644 --- a/beacon/rpc/rpc.go +++ b/beacon/rpc/rpc.go @@ -1,7 +1,6 @@ package rpc import ( - "errors" "fmt" "net" @@ -178,8 +177,11 @@ func (s *server) GetEpochInformation(ctx context.Context, in *pb.EpochInformatio state := s.chain.GetState() config := s.chain.GetConfig() - if in.EpochIndex < s.chain.GetCurrentSlot()/s.chain.GetConfig().EpochLength-3 { - return nil, errors.New("Epoch is too old") + if in.EpochIndex > s.chain.GetCurrentSlot()/s.chain.GetConfig().EpochLength-3 { + return &pb.EpochInformationResponse{ + HasEpochInformation: false, + Information: nil, + }, nil } requestedEpochSlot := uint64(in.EpochIndex) * s.chain.GetConfig().EpochLength From 9148c3549fd9c080e843fe7868755267118dd1ba Mon Sep 17 00:00:00 2001 From: wqking Date: Tue, 19 Nov 2019 19:17:44 +0800 Subject: [PATCH 13/20] Added RPC GetConfigHash to Beacon --- beacon/config/config.go | 17 ++ beacon/rpc/rpc.go | 8 + pb/beaconrpc.pb.go | 413 +++++++++++++++++++++++++--------------- pb/beaconrpc.proto | 7 + pb/common.pb.go | 222 ++++++++++++--------- pb/p2p.pb.go | 223 +++++++++++++++------- pb/shardrpc.pb.go | 152 ++++++++------- validator/module/app.go | 11 ++ 8 files changed, 665 insertions(+), 388 deletions(-) diff --git a/beacon/config/config.go b/beacon/config/config.go index e8b3fb36..96a0856b 100644 --- a/beacon/config/config.go +++ b/beacon/config/config.go @@ -1,5 +1,10 @@ package config +import ( + "crypto/sha256" + "encoding/json" +) + // Options are bare options passed to the beacon app. type Options struct { RPCListen string `yaml:"rpc_listen_addr" cli:"rpclisten"` @@ -189,3 +194,15 @@ var NetworkIDs = map[string]Config{ "regtest": RegtestConfig, "testnet": MainNetConfig, } + +// HashConfig computes the hash of the config +func HashConfig(config *Config) []byte { + // Use JSON marshal instead of ssz.HashTreeRoot because ssz doesn't support type 'int'. + b, err := json.Marshal(config) + if err != nil { + // We should allow failed hash here, let's panic and exit + panic(err) + } + h := sha256.Sum256(b) + return h[:] +} diff --git a/beacon/rpc/rpc.go b/beacon/rpc/rpc.go index 115f55e0..5f651959 100644 --- a/beacon/rpc/rpc.go +++ b/beacon/rpc/rpc.go @@ -13,6 +13,7 @@ import ( "github.com/golang/protobuf/ptypes/empty" "github.com/phoreproject/synapse/beacon" + "github.com/phoreproject/synapse/beacon/config" "github.com/phoreproject/synapse/chainhash" "github.com/phoreproject/synapse/primitives" @@ -342,6 +343,13 @@ func (s *server) GetValidatorInformation(ctx context.Context, in *pb.GetValidato return validator.ToProto(), nil } +// GetConfigHash gets the config hash +func (s *server) GetConfigHash(ctx context.Context, in *empty.Empty) (*pb.GetConfigHashResponse, error) { + return &pb.GetConfigHashResponse{ + Hash: config.HashConfig(s.chain.GetConfig()), + }, nil +} + // Serve serves the RPC server func Serve(proto string, listenAddr string, b *beacon.Blockchain, hostNode *p2p.HostNode, mempool *beacon.Mempool) error { lis, err := net.Listen(proto, listenAddr) diff --git a/pb/beaconrpc.pb.go b/pb/beaconrpc.pb.go index c3f4dc61..fba07194 100644 --- a/pb/beaconrpc.pb.go +++ b/pb/beaconrpc.pb.go @@ -3,14 +3,13 @@ package pb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import empty "github.com/golang/protobuf/ptypes/empty" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -36,16 +35,17 @@ func (m *GetShardProposerRequest) Reset() { *m = GetShardProposerRequest func (m *GetShardProposerRequest) String() string { return proto.CompactTextString(m) } func (*GetShardProposerRequest) ProtoMessage() {} func (*GetShardProposerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{0} + return fileDescriptor_a1e1342b9bf4ce6d, []int{0} } + func (m *GetShardProposerRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetShardProposerRequest.Unmarshal(m, b) } func (m *GetShardProposerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetShardProposerRequest.Marshal(b, m, deterministic) } -func (dst *GetShardProposerRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetShardProposerRequest.Merge(dst, src) +func (m *GetShardProposerRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetShardProposerRequest.Merge(m, src) } func (m *GetShardProposerRequest) XXX_Size() int { return xxx_messageInfo_GetShardProposerRequest.Size(m) @@ -82,16 +82,17 @@ func (m *ShardProposerResponse) Reset() { *m = ShardProposerResponse{} } func (m *ShardProposerResponse) String() string { return proto.CompactTextString(m) } func (*ShardProposerResponse) ProtoMessage() {} func (*ShardProposerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{1} + return fileDescriptor_a1e1342b9bf4ce6d, []int{1} } + func (m *ShardProposerResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardProposerResponse.Unmarshal(m, b) } func (m *ShardProposerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardProposerResponse.Marshal(b, m, deterministic) } -func (dst *ShardProposerResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardProposerResponse.Merge(dst, src) +func (m *ShardProposerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardProposerResponse.Merge(m, src) } func (m *ShardProposerResponse) XXX_Size() int { return xxx_messageInfo_ShardProposerResponse.Size(m) @@ -127,16 +128,17 @@ func (m *MempoolRequest) Reset() { *m = MempoolRequest{} } func (m *MempoolRequest) String() string { return proto.CompactTextString(m) } func (*MempoolRequest) ProtoMessage() {} func (*MempoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{2} + return fileDescriptor_a1e1342b9bf4ce6d, []int{2} } + func (m *MempoolRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MempoolRequest.Unmarshal(m, b) } func (m *MempoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MempoolRequest.Marshal(b, m, deterministic) } -func (dst *MempoolRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_MempoolRequest.Merge(dst, src) +func (m *MempoolRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_MempoolRequest.Merge(m, src) } func (m *MempoolRequest) XXX_Size() int { return xxx_messageInfo_MempoolRequest.Size(m) @@ -165,16 +167,17 @@ func (m *GetValidatorRequest) Reset() { *m = GetValidatorRequest{} } func (m *GetValidatorRequest) String() string { return proto.CompactTextString(m) } func (*GetValidatorRequest) ProtoMessage() {} func (*GetValidatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{3} + return fileDescriptor_a1e1342b9bf4ce6d, []int{3} } + func (m *GetValidatorRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetValidatorRequest.Unmarshal(m, b) } func (m *GetValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetValidatorRequest.Marshal(b, m, deterministic) } -func (dst *GetValidatorRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetValidatorRequest.Merge(dst, src) +func (m *GetValidatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetValidatorRequest.Merge(m, src) } func (m *GetValidatorRequest) XXX_Size() int { return xxx_messageInfo_GetValidatorRequest.Size(m) @@ -203,16 +206,17 @@ func (m *GetBlockRequest) Reset() { *m = GetBlockRequest{} } func (m *GetBlockRequest) String() string { return proto.CompactTextString(m) } func (*GetBlockRequest) ProtoMessage() {} func (*GetBlockRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{4} + return fileDescriptor_a1e1342b9bf4ce6d, []int{4} } + func (m *GetBlockRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockRequest.Unmarshal(m, b) } func (m *GetBlockRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetBlockRequest.Marshal(b, m, deterministic) } -func (dst *GetBlockRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBlockRequest.Merge(dst, src) +func (m *GetBlockRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockRequest.Merge(m, src) } func (m *GetBlockRequest) XXX_Size() int { return xxx_messageInfo_GetBlockRequest.Size(m) @@ -241,16 +245,17 @@ func (m *GetBlockResponse) Reset() { *m = GetBlockResponse{} } func (m *GetBlockResponse) String() string { return proto.CompactTextString(m) } func (*GetBlockResponse) ProtoMessage() {} func (*GetBlockResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{5} + return fileDescriptor_a1e1342b9bf4ce6d, []int{5} } + func (m *GetBlockResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockResponse.Unmarshal(m, b) } func (m *GetBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetBlockResponse.Marshal(b, m, deterministic) } -func (dst *GetBlockResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBlockResponse.Merge(dst, src) +func (m *GetBlockResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockResponse.Merge(m, src) } func (m *GetBlockResponse) XXX_Size() int { return xxx_messageInfo_GetBlockResponse.Size(m) @@ -279,16 +284,17 @@ func (m *GetProposerForSlotRequest) Reset() { *m = GetProposerForSlotReq func (m *GetProposerForSlotRequest) String() string { return proto.CompactTextString(m) } func (*GetProposerForSlotRequest) ProtoMessage() {} func (*GetProposerForSlotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{6} + return fileDescriptor_a1e1342b9bf4ce6d, []int{6} } + func (m *GetProposerForSlotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetProposerForSlotRequest.Unmarshal(m, b) } func (m *GetProposerForSlotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetProposerForSlotRequest.Marshal(b, m, deterministic) } -func (dst *GetProposerForSlotRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetProposerForSlotRequest.Merge(dst, src) +func (m *GetProposerForSlotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetProposerForSlotRequest.Merge(m, src) } func (m *GetProposerForSlotRequest) XXX_Size() int { return xxx_messageInfo_GetProposerForSlotRequest.Size(m) @@ -317,16 +323,17 @@ func (m *GetProposerForSlotResponse) Reset() { *m = GetProposerForSlotRe func (m *GetProposerForSlotResponse) String() string { return proto.CompactTextString(m) } func (*GetProposerForSlotResponse) ProtoMessage() {} func (*GetProposerForSlotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{7} + return fileDescriptor_a1e1342b9bf4ce6d, []int{7} } + func (m *GetProposerForSlotResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetProposerForSlotResponse.Unmarshal(m, b) } func (m *GetProposerForSlotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetProposerForSlotResponse.Marshal(b, m, deterministic) } -func (dst *GetProposerForSlotResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetProposerForSlotResponse.Merge(dst, src) +func (m *GetProposerForSlotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetProposerForSlotResponse.Merge(m, src) } func (m *GetProposerForSlotResponse) XXX_Size() int { return xxx_messageInfo_GetProposerForSlotResponse.Size(m) @@ -355,16 +362,17 @@ func (m *EpochInformationRequest) Reset() { *m = EpochInformationRequest func (m *EpochInformationRequest) String() string { return proto.CompactTextString(m) } func (*EpochInformationRequest) ProtoMessage() {} func (*EpochInformationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{8} + return fileDescriptor_a1e1342b9bf4ce6d, []int{8} } + func (m *EpochInformationRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EpochInformationRequest.Unmarshal(m, b) } func (m *EpochInformationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EpochInformationRequest.Marshal(b, m, deterministic) } -func (dst *EpochInformationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_EpochInformationRequest.Merge(dst, src) +func (m *EpochInformationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochInformationRequest.Merge(m, src) } func (m *EpochInformationRequest) XXX_Size() int { return xxx_messageInfo_EpochInformationRequest.Size(m) @@ -394,16 +402,17 @@ func (m *EpochInformationResponse) Reset() { *m = EpochInformationRespon func (m *EpochInformationResponse) String() string { return proto.CompactTextString(m) } func (*EpochInformationResponse) ProtoMessage() {} func (*EpochInformationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{9} + return fileDescriptor_a1e1342b9bf4ce6d, []int{9} } + func (m *EpochInformationResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EpochInformationResponse.Unmarshal(m, b) } func (m *EpochInformationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EpochInformationResponse.Marshal(b, m, deterministic) } -func (dst *EpochInformationResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_EpochInformationResponse.Merge(dst, src) +func (m *EpochInformationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochInformationResponse.Merge(m, src) } func (m *EpochInformationResponse) XXX_Size() int { return xxx_messageInfo_EpochInformationResponse.Size(m) @@ -449,16 +458,17 @@ func (m *EpochInformation) Reset() { *m = EpochInformation{} } func (m *EpochInformation) String() string { return proto.CompactTextString(m) } func (*EpochInformation) ProtoMessage() {} func (*EpochInformation) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{10} + return fileDescriptor_a1e1342b9bf4ce6d, []int{10} } + func (m *EpochInformation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EpochInformation.Unmarshal(m, b) } func (m *EpochInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EpochInformation.Marshal(b, m, deterministic) } -func (dst *EpochInformation) XXX_Merge(src proto.Message) { - xxx_messageInfo_EpochInformation.Merge(dst, src) +func (m *EpochInformation) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochInformation.Merge(m, src) } func (m *EpochInformation) XXX_Size() int { return xxx_messageInfo_EpochInformation.Size(m) @@ -557,16 +567,17 @@ func (m *DisconnectResponse) Reset() { *m = DisconnectResponse{} } func (m *DisconnectResponse) String() string { return proto.CompactTextString(m) } func (*DisconnectResponse) ProtoMessage() {} func (*DisconnectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{11} + return fileDescriptor_a1e1342b9bf4ce6d, []int{11} } + func (m *DisconnectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DisconnectResponse.Unmarshal(m, b) } func (m *DisconnectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DisconnectResponse.Marshal(b, m, deterministic) } -func (dst *DisconnectResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DisconnectResponse.Merge(dst, src) +func (m *DisconnectResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DisconnectResponse.Merge(m, src) } func (m *DisconnectResponse) XXX_Size() int { return xxx_messageInfo_DisconnectResponse.Size(m) @@ -595,16 +606,17 @@ func (m *GetCommitteesForSlotRequest) Reset() { *m = GetCommitteesForSlo func (m *GetCommitteesForSlotRequest) String() string { return proto.CompactTextString(m) } func (*GetCommitteesForSlotRequest) ProtoMessage() {} func (*GetCommitteesForSlotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{12} + return fileDescriptor_a1e1342b9bf4ce6d, []int{12} } + func (m *GetCommitteesForSlotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCommitteesForSlotRequest.Unmarshal(m, b) } func (m *GetCommitteesForSlotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetCommitteesForSlotRequest.Marshal(b, m, deterministic) } -func (dst *GetCommitteesForSlotRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetCommitteesForSlotRequest.Merge(dst, src) +func (m *GetCommitteesForSlotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCommitteesForSlotRequest.Merge(m, src) } func (m *GetCommitteesForSlotRequest) XXX_Size() int { return xxx_messageInfo_GetCommitteesForSlotRequest.Size(m) @@ -633,16 +645,17 @@ func (m *GetSlotAndShardAssignmentRequest) Reset() { *m = GetSlotAndShar func (m *GetSlotAndShardAssignmentRequest) String() string { return proto.CompactTextString(m) } func (*GetSlotAndShardAssignmentRequest) ProtoMessage() {} func (*GetSlotAndShardAssignmentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{13} + return fileDescriptor_a1e1342b9bf4ce6d, []int{13} } + func (m *GetSlotAndShardAssignmentRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSlotAndShardAssignmentRequest.Unmarshal(m, b) } func (m *GetSlotAndShardAssignmentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetSlotAndShardAssignmentRequest.Marshal(b, m, deterministic) } -func (dst *GetSlotAndShardAssignmentRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetSlotAndShardAssignmentRequest.Merge(dst, src) +func (m *GetSlotAndShardAssignmentRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSlotAndShardAssignmentRequest.Merge(m, src) } func (m *GetSlotAndShardAssignmentRequest) XXX_Size() int { return xxx_messageInfo_GetSlotAndShardAssignmentRequest.Size(m) @@ -671,16 +684,17 @@ func (m *SubmitBlockRequest) Reset() { *m = SubmitBlockRequest{} } func (m *SubmitBlockRequest) String() string { return proto.CompactTextString(m) } func (*SubmitBlockRequest) ProtoMessage() {} func (*SubmitBlockRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{14} + return fileDescriptor_a1e1342b9bf4ce6d, []int{14} } + func (m *SubmitBlockRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SubmitBlockRequest.Unmarshal(m, b) } func (m *SubmitBlockRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SubmitBlockRequest.Marshal(b, m, deterministic) } -func (dst *SubmitBlockRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubmitBlockRequest.Merge(dst, src) +func (m *SubmitBlockRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubmitBlockRequest.Merge(m, src) } func (m *SubmitBlockRequest) XXX_Size() int { return xxx_messageInfo_SubmitBlockRequest.Size(m) @@ -709,16 +723,17 @@ func (m *SubmitBlockResponse) Reset() { *m = SubmitBlockResponse{} } func (m *SubmitBlockResponse) String() string { return proto.CompactTextString(m) } func (*SubmitBlockResponse) ProtoMessage() {} func (*SubmitBlockResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{15} + return fileDescriptor_a1e1342b9bf4ce6d, []int{15} } + func (m *SubmitBlockResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SubmitBlockResponse.Unmarshal(m, b) } func (m *SubmitBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SubmitBlockResponse.Marshal(b, m, deterministic) } -func (dst *SubmitBlockResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubmitBlockResponse.Merge(dst, src) +func (m *SubmitBlockResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubmitBlockResponse.Merge(m, src) } func (m *SubmitBlockResponse) XXX_Size() int { return xxx_messageInfo_SubmitBlockResponse.Size(m) @@ -748,16 +763,17 @@ func (m *SlotNumberResponse) Reset() { *m = SlotNumberResponse{} } func (m *SlotNumberResponse) String() string { return proto.CompactTextString(m) } func (*SlotNumberResponse) ProtoMessage() {} func (*SlotNumberResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{16} + return fileDescriptor_a1e1342b9bf4ce6d, []int{16} } + func (m *SlotNumberResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlotNumberResponse.Unmarshal(m, b) } func (m *SlotNumberResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SlotNumberResponse.Marshal(b, m, deterministic) } -func (dst *SlotNumberResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_SlotNumberResponse.Merge(dst, src) +func (m *SlotNumberResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SlotNumberResponse.Merge(m, src) } func (m *SlotNumberResponse) XXX_Size() int { return xxx_messageInfo_SlotNumberResponse.Size(m) @@ -793,16 +809,17 @@ func (m *GetBlockHashRequest) Reset() { *m = GetBlockHashRequest{} } func (m *GetBlockHashRequest) String() string { return proto.CompactTextString(m) } func (*GetBlockHashRequest) ProtoMessage() {} func (*GetBlockHashRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{17} + return fileDescriptor_a1e1342b9bf4ce6d, []int{17} } + func (m *GetBlockHashRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockHashRequest.Unmarshal(m, b) } func (m *GetBlockHashRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetBlockHashRequest.Marshal(b, m, deterministic) } -func (dst *GetBlockHashRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBlockHashRequest.Merge(dst, src) +func (m *GetBlockHashRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockHashRequest.Merge(m, src) } func (m *GetBlockHashRequest) XXX_Size() int { return xxx_messageInfo_GetBlockHashRequest.Size(m) @@ -831,16 +848,17 @@ func (m *GetBlockHashResponse) Reset() { *m = GetBlockHashResponse{} } func (m *GetBlockHashResponse) String() string { return proto.CompactTextString(m) } func (*GetBlockHashResponse) ProtoMessage() {} func (*GetBlockHashResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{18} + return fileDescriptor_a1e1342b9bf4ce6d, []int{18} } + func (m *GetBlockHashResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockHashResponse.Unmarshal(m, b) } func (m *GetBlockHashResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetBlockHashResponse.Marshal(b, m, deterministic) } -func (dst *GetBlockHashResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBlockHashResponse.Merge(dst, src) +func (m *GetBlockHashResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockHashResponse.Merge(m, src) } func (m *GetBlockHashResponse) XXX_Size() int { return xxx_messageInfo_GetBlockHashResponse.Size(m) @@ -869,16 +887,17 @@ func (m *GetValidatorAtIndexRequest) Reset() { *m = GetValidatorAtIndexR func (m *GetValidatorAtIndexRequest) String() string { return proto.CompactTextString(m) } func (*GetValidatorAtIndexRequest) ProtoMessage() {} func (*GetValidatorAtIndexRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{19} + return fileDescriptor_a1e1342b9bf4ce6d, []int{19} } + func (m *GetValidatorAtIndexRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetValidatorAtIndexRequest.Unmarshal(m, b) } func (m *GetValidatorAtIndexRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetValidatorAtIndexRequest.Marshal(b, m, deterministic) } -func (dst *GetValidatorAtIndexRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetValidatorAtIndexRequest.Merge(dst, src) +func (m *GetValidatorAtIndexRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetValidatorAtIndexRequest.Merge(m, src) } func (m *GetValidatorAtIndexRequest) XXX_Size() int { return xxx_messageInfo_GetValidatorAtIndexRequest.Size(m) @@ -907,16 +926,17 @@ func (m *GetValidatorAtIndexResponse) Reset() { *m = GetValidatorAtIndex func (m *GetValidatorAtIndexResponse) String() string { return proto.CompactTextString(m) } func (*GetValidatorAtIndexResponse) ProtoMessage() {} func (*GetValidatorAtIndexResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{20} + return fileDescriptor_a1e1342b9bf4ce6d, []int{20} } + func (m *GetValidatorAtIndexResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetValidatorAtIndexResponse.Unmarshal(m, b) } func (m *GetValidatorAtIndexResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetValidatorAtIndexResponse.Marshal(b, m, deterministic) } -func (dst *GetValidatorAtIndexResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetValidatorAtIndexResponse.Merge(dst, src) +func (m *GetValidatorAtIndexResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetValidatorAtIndexResponse.Merge(m, src) } func (m *GetValidatorAtIndexResponse) XXX_Size() int { return xxx_messageInfo_GetValidatorAtIndexResponse.Size(m) @@ -946,16 +966,17 @@ func (m *GetCommitteeValidatorsRequest) Reset() { *m = GetCommitteeValid func (m *GetCommitteeValidatorsRequest) String() string { return proto.CompactTextString(m) } func (*GetCommitteeValidatorsRequest) ProtoMessage() {} func (*GetCommitteeValidatorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{21} + return fileDescriptor_a1e1342b9bf4ce6d, []int{21} } + func (m *GetCommitteeValidatorsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCommitteeValidatorsRequest.Unmarshal(m, b) } func (m *GetCommitteeValidatorsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetCommitteeValidatorsRequest.Marshal(b, m, deterministic) } -func (dst *GetCommitteeValidatorsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetCommitteeValidatorsRequest.Merge(dst, src) +func (m *GetCommitteeValidatorsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCommitteeValidatorsRequest.Merge(m, src) } func (m *GetCommitteeValidatorsRequest) XXX_Size() int { return xxx_messageInfo_GetCommitteeValidatorsRequest.Size(m) @@ -991,16 +1012,17 @@ func (m *GetStateResponse) Reset() { *m = GetStateResponse{} } func (m *GetStateResponse) String() string { return proto.CompactTextString(m) } func (*GetStateResponse) ProtoMessage() {} func (*GetStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{22} + return fileDescriptor_a1e1342b9bf4ce6d, []int{22} } + func (m *GetStateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetStateResponse.Unmarshal(m, b) } func (m *GetStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetStateResponse.Marshal(b, m, deterministic) } -func (dst *GetStateResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetStateResponse.Merge(dst, src) +func (m *GetStateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetStateResponse.Merge(m, src) } func (m *GetStateResponse) XXX_Size() int { return xxx_messageInfo_GetStateResponse.Size(m) @@ -1029,16 +1051,17 @@ func (m *GetStateRootResponse) Reset() { *m = GetStateRootResponse{} } func (m *GetStateRootResponse) String() string { return proto.CompactTextString(m) } func (*GetStateRootResponse) ProtoMessage() {} func (*GetStateRootResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{23} + return fileDescriptor_a1e1342b9bf4ce6d, []int{23} } + func (m *GetStateRootResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetStateRootResponse.Unmarshal(m, b) } func (m *GetStateRootResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetStateRootResponse.Marshal(b, m, deterministic) } -func (dst *GetStateRootResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetStateRootResponse.Merge(dst, src) +func (m *GetStateRootResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetStateRootResponse.Merge(m, src) } func (m *GetStateRootResponse) XXX_Size() int { return xxx_messageInfo_GetStateRootResponse.Size(m) @@ -1067,16 +1090,17 @@ func (m *GetCommitteeValidatorsResponse) Reset() { *m = GetCommitteeVali func (m *GetCommitteeValidatorsResponse) String() string { return proto.CompactTextString(m) } func (*GetCommitteeValidatorsResponse) ProtoMessage() {} func (*GetCommitteeValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{24} + return fileDescriptor_a1e1342b9bf4ce6d, []int{24} } + func (m *GetCommitteeValidatorsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCommitteeValidatorsResponse.Unmarshal(m, b) } func (m *GetCommitteeValidatorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetCommitteeValidatorsResponse.Marshal(b, m, deterministic) } -func (dst *GetCommitteeValidatorsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetCommitteeValidatorsResponse.Merge(dst, src) +func (m *GetCommitteeValidatorsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCommitteeValidatorsResponse.Merge(m, src) } func (m *GetCommitteeValidatorsResponse) XXX_Size() int { return xxx_messageInfo_GetCommitteeValidatorsResponse.Size(m) @@ -1105,16 +1129,17 @@ func (m *GetCommitteeValidatorIndicesResponse) Reset() { *m = GetCommitt func (m *GetCommitteeValidatorIndicesResponse) String() string { return proto.CompactTextString(m) } func (*GetCommitteeValidatorIndicesResponse) ProtoMessage() {} func (*GetCommitteeValidatorIndicesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_beaconrpc_43e536a52cc0c434, []int{25} + return fileDescriptor_a1e1342b9bf4ce6d, []int{25} } + func (m *GetCommitteeValidatorIndicesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetCommitteeValidatorIndicesResponse.Unmarshal(m, b) } func (m *GetCommitteeValidatorIndicesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetCommitteeValidatorIndicesResponse.Marshal(b, m, deterministic) } -func (dst *GetCommitteeValidatorIndicesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetCommitteeValidatorIndicesResponse.Merge(dst, src) +func (m *GetCommitteeValidatorIndicesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCommitteeValidatorIndicesResponse.Merge(m, src) } func (m *GetCommitteeValidatorIndicesResponse) XXX_Size() int { return xxx_messageInfo_GetCommitteeValidatorIndicesResponse.Size(m) @@ -1132,6 +1157,45 @@ func (m *GetCommitteeValidatorIndicesResponse) GetValidators() []uint32 { return nil } +type GetConfigHashResponse struct { + Hash []byte `protobuf:"bytes,1,opt,name=Hash,proto3" json:"Hash,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetConfigHashResponse) Reset() { *m = GetConfigHashResponse{} } +func (m *GetConfigHashResponse) String() string { return proto.CompactTextString(m) } +func (*GetConfigHashResponse) ProtoMessage() {} +func (*GetConfigHashResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a1e1342b9bf4ce6d, []int{26} +} + +func (m *GetConfigHashResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetConfigHashResponse.Unmarshal(m, b) +} +func (m *GetConfigHashResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetConfigHashResponse.Marshal(b, m, deterministic) +} +func (m *GetConfigHashResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetConfigHashResponse.Merge(m, src) +} +func (m *GetConfigHashResponse) XXX_Size() int { + return xxx_messageInfo_GetConfigHashResponse.Size(m) +} +func (m *GetConfigHashResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetConfigHashResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetConfigHashResponse proto.InternalMessageInfo + +func (m *GetConfigHashResponse) GetHash() []byte { + if m != nil { + return m.Hash + } + return nil +} + func init() { proto.RegisterType((*GetShardProposerRequest)(nil), "pb.GetShardProposerRequest") proto.RegisterType((*ShardProposerResponse)(nil), "pb.ShardProposerResponse") @@ -1159,6 +1223,81 @@ func init() { proto.RegisterType((*GetStateRootResponse)(nil), "pb.GetStateRootResponse") proto.RegisterType((*GetCommitteeValidatorsResponse)(nil), "pb.GetCommitteeValidatorsResponse") proto.RegisterType((*GetCommitteeValidatorIndicesResponse)(nil), "pb.GetCommitteeValidatorIndicesResponse") + proto.RegisterType((*GetConfigHashResponse)(nil), "pb.GetConfigHashResponse") +} + +func init() { proto.RegisterFile("beaconrpc.proto", fileDescriptor_a1e1342b9bf4ce6d) } + +var fileDescriptor_a1e1342b9bf4ce6d = []byte{ + // 1083 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5f, 0x53, 0xdb, 0x46, + 0x10, 0x1f, 0x0c, 0x04, 0xbc, 0xb6, 0x80, 0x1c, 0x06, 0x8c, 0x4c, 0x28, 0x73, 0x93, 0x74, 0x32, + 0x4d, 0x6b, 0x5a, 0x08, 0x4c, 0x32, 0xd3, 0x7f, 0x06, 0x07, 0x87, 0x34, 0x4d, 0x5d, 0x39, 0xed, + 0x53, 0x5f, 0x64, 0xf9, 0x30, 0x1a, 0x2c, 0x9d, 0xab, 0x3b, 0x77, 0xc2, 0x7b, 0x3f, 0x68, 0xbf, + 0x42, 0xbf, 0x41, 0x47, 0xab, 0x93, 0x74, 0xb2, 0x24, 0xdc, 0x37, 0xe9, 0xb7, 0x7f, 0x6f, 0xf7, + 0x77, 0x7b, 0x0b, 0x9b, 0x43, 0x66, 0x3b, 0xdc, 0x0f, 0xa6, 0x4e, 0x7b, 0x1a, 0x70, 0xc9, 0x49, + 0x65, 0x3a, 0x34, 0x5b, 0x63, 0xce, 0xc7, 0x13, 0x76, 0x8c, 0xc8, 0x70, 0x76, 0x73, 0xcc, 0xbc, + 0xa9, 0xbc, 0x8f, 0x14, 0xcc, 0xba, 0xc3, 0x3d, 0x8f, 0xfb, 0xd1, 0x1f, 0xed, 0xc1, 0x5e, 0x8f, + 0xc9, 0xc1, 0xad, 0x1d, 0x8c, 0xfa, 0x01, 0x9f, 0x72, 0xc1, 0x02, 0x8b, 0xfd, 0x39, 0x63, 0x42, + 0x92, 0x26, 0xac, 0x21, 0x7e, 0xdd, 0x6d, 0x2e, 0x1d, 0x2d, 0x3d, 0x5f, 0xb1, 0xe2, 0x5f, 0x42, + 0x60, 0x65, 0x30, 0xe1, 0xb2, 0x59, 0x41, 0x18, 0xbf, 0xa9, 0x0d, 0x3b, 0x73, 0x5e, 0xc4, 0x94, + 0xfb, 0x82, 0x11, 0x13, 0xd6, 0x63, 0x0c, 0xfd, 0x18, 0x56, 0xf2, 0x4f, 0xbe, 0x84, 0xc7, 0xf1, + 0x77, 0x7f, 0x36, 0x9c, 0xb8, 0xce, 0x4f, 0xec, 0x1e, 0xbd, 0xd6, 0xad, 0xbc, 0x80, 0x9e, 0xc3, + 0xc6, 0xcf, 0xcc, 0x9b, 0x72, 0x3e, 0x89, 0x53, 0x7c, 0x0a, 0xc6, 0x7b, 0x5b, 0xc8, 0x8b, 0x09, + 0x77, 0xee, 0xde, 0xda, 0xe2, 0x16, 0x03, 0xd4, 0xad, 0x2c, 0x48, 0x9f, 0xc1, 0x76, 0x8f, 0xc9, + 0xdf, 0xed, 0x89, 0x3b, 0xb2, 0x25, 0x4f, 0xce, 0xb7, 0x01, 0x15, 0x75, 0x34, 0xc3, 0xaa, 0x5c, + 0x77, 0xe9, 0x33, 0xd8, 0xec, 0xb1, 0xc8, 0x2c, 0x56, 0x21, 0xb0, 0xa2, 0xb9, 0xc5, 0x6f, 0x7a, + 0x0a, 0x5b, 0xa9, 0x9a, 0x3a, 0xe3, 0x67, 0xb0, 0x8a, 0x00, 0x2a, 0xd6, 0x4e, 0xaa, 0xed, 0xe9, + 0xb0, 0x1d, 0x69, 0x44, 0x38, 0x3d, 0x86, 0xfd, 0x1e, 0x93, 0xf1, 0x91, 0xae, 0x78, 0x10, 0xd6, + 0x4c, 0x8b, 0x82, 0xe5, 0x5c, 0xd2, 0xca, 0xf9, 0x0a, 0xcc, 0x22, 0x83, 0xc5, 0x35, 0xa5, 0xaf, + 0x61, 0xef, 0xcd, 0x94, 0x3b, 0xb7, 0xd7, 0xfe, 0x0d, 0x0f, 0x3c, 0x5b, 0xba, 0xdc, 0x8f, 0x03, + 0x1d, 0x02, 0x28, 0xd1, 0x88, 0x7d, 0x52, 0xe1, 0x34, 0x84, 0xfe, 0xbd, 0x04, 0xcd, 0xbc, 0xad, + 0x8a, 0xf9, 0x35, 0x6c, 0xbf, 0xb5, 0xc5, 0xbc, 0x18, 0xbd, 0xac, 0x5b, 0x45, 0x22, 0x72, 0x0e, + 0x35, 0x5d, 0xb3, 0x82, 0xb5, 0x69, 0x84, 0xb5, 0xc9, 0x05, 0xd1, 0x15, 0xe9, 0x3f, 0x2b, 0xb0, + 0x95, 0x73, 0xf6, 0x11, 0xf6, 0x90, 0x5f, 0x97, 0xdc, 0xf3, 0x5c, 0x29, 0x19, 0x13, 0xaa, 0x28, + 0xa2, 0xb9, 0x74, 0xb4, 0xfc, 0xbc, 0x76, 0x62, 0x86, 0x8e, 0x8b, 0x55, 0xac, 0x32, 0xd3, 0x0c, + 0x93, 0x97, 0xa3, 0xd2, 0x93, 0xd7, 0xb0, 0xf5, 0xde, 0x96, 0x4c, 0xc8, 0xcb, 0x80, 0x0b, 0x31, + 0x71, 0xfd, 0x3b, 0xd1, 0x5c, 0xc6, 0x10, 0x46, 0x18, 0x22, 0x41, 0xad, 0x9c, 0x1a, 0xf9, 0x1c, + 0x36, 0xde, 0xcd, 0x84, 0x74, 0x6f, 0x5c, 0x36, 0xc2, 0x13, 0x34, 0x57, 0xb0, 0xc8, 0x73, 0x68, + 0xc8, 0xdb, 0x04, 0x41, 0x82, 0xad, 0x46, 0xbc, 0xcd, 0x80, 0x61, 0xbb, 0x3e, 0xda, 0xc1, 0x98, + 0x49, 0x54, 0x79, 0x84, 0x2a, 0x1a, 0x42, 0xda, 0x40, 0xfa, 0x01, 0xfb, 0xcb, 0xe5, 0x33, 0xa1, + 0xe9, 0xad, 0xa1, 0x5e, 0x81, 0x84, 0x9c, 0xc3, 0x6e, 0x8c, 0xce, 0x65, 0xb9, 0x8e, 0x59, 0x96, + 0x48, 0xc9, 0x4b, 0xd8, 0xc9, 0x49, 0x30, 0x54, 0x15, 0x43, 0x15, 0x0b, 0xc9, 0x77, 0x69, 0x76, + 0x5a, 0x21, 0xa1, 0xa8, 0x90, 0x05, 0x8a, 0xe4, 0x0f, 0x68, 0xe5, 0x9b, 0xf6, 0x81, 0x7d, 0x92, + 0x51, 0xc6, 0xb5, 0x85, 0x3d, 0x7f, 0xc8, 0x9c, 0xb6, 0x81, 0x74, 0x5d, 0xe1, 0x70, 0xdf, 0x67, + 0x4e, 0x7a, 0xad, 0xc2, 0x89, 0x37, 0x73, 0x1c, 0x26, 0x84, 0xa2, 0x75, 0xfc, 0x4b, 0xbf, 0x81, + 0x56, 0x8f, 0xc9, 0x7c, 0x90, 0x07, 0x6e, 0x70, 0x17, 0x8e, 0xc2, 0xc9, 0x3a, 0xe1, 0xb2, 0xe3, + 0x8f, 0x30, 0x97, 0x8e, 0x10, 0xee, 0xd8, 0xf7, 0x98, 0x9f, 0xd8, 0x1d, 0x41, 0x2d, 0x19, 0x4b, + 0xc9, 0x2c, 0xd2, 0x21, 0x7a, 0x06, 0x64, 0x30, 0x1b, 0x7a, 0x6e, 0x76, 0x2e, 0x2d, 0x9c, 0x37, + 0xa7, 0xb0, 0x9d, 0x31, 0x53, 0x07, 0x3c, 0x80, 0xea, 0xfc, 0xac, 0x4c, 0x01, 0x6a, 0x01, 0x09, + 0xd3, 0xfd, 0x30, 0xf3, 0x86, 0xda, 0xfc, 0x3e, 0x04, 0x48, 0xd1, 0x78, 0x68, 0xa4, 0x48, 0xd6, + 0x67, 0x65, 0xde, 0xe7, 0x19, 0xce, 0xde, 0xe4, 0x5f, 0x9b, 0x44, 0x0f, 0x39, 0xa5, 0x5f, 0x40, + 0x23, 0x6b, 0xa6, 0x92, 0x29, 0x1a, 0xc8, 0x27, 0x38, 0x2a, 0x93, 0xa2, 0x75, 0x24, 0x0e, 0xb3, + 0x38, 0x52, 0x03, 0x56, 0xd3, 0x71, 0x67, 0x58, 0xd1, 0x0f, 0x7d, 0x87, 0xfd, 0xcc, 0xdb, 0xa8, + 0x30, 0x2f, 0xa0, 0x9a, 0xc8, 0x54, 0x8d, 0x91, 0xb2, 0xe9, 0x1b, 0x92, 0xca, 0xe9, 0x6f, 0xf0, + 0x44, 0xe7, 0x46, 0x22, 0x10, 0xff, 0xf3, 0xb0, 0x61, 0x8a, 0xc8, 0x0f, 0xac, 0x9e, 0x61, 0x45, + 0x3f, 0xea, 0x9d, 0x19, 0x48, 0x5b, 0x32, 0xfd, 0x9d, 0x11, 0x21, 0xa0, 0xf7, 0x3d, 0xd2, 0x88, + 0x70, 0xfa, 0x12, 0xeb, 0x16, 0x41, 0x5c, 0x7b, 0x30, 0x0e, 0xa0, 0x9a, 0x80, 0x71, 0xe3, 0x13, + 0x80, 0xfe, 0x02, 0x87, 0x65, 0x27, 0x50, 0xf6, 0x5f, 0x01, 0xa4, 0xa8, 0x1a, 0xb8, 0x73, 0x15, + 0xd1, 0x14, 0xe8, 0x15, 0x3c, 0x2d, 0x74, 0x78, 0xed, 0x8f, 0x5c, 0x87, 0x09, 0x9d, 0x5b, 0x73, + 0x6e, 0x8d, 0x8c, 0x9f, 0x17, 0xb0, 0x83, 0x7e, 0xfc, 0x1b, 0x77, 0xbc, 0x88, 0x07, 0x27, 0xff, + 0xae, 0x81, 0x81, 0x8c, 0x71, 0x6e, 0x6d, 0xd7, 0xb7, 0xfa, 0x97, 0xe4, 0x7b, 0xa8, 0x69, 0xb7, + 0x80, 0xec, 0x62, 0xb9, 0x72, 0xb7, 0xc9, 0xdc, 0xcb, 0xe1, 0x2a, 0xca, 0x0f, 0x60, 0xa8, 0x2b, + 0xac, 0x3a, 0xb5, 0xdb, 0x8e, 0x36, 0xab, 0x76, 0xbc, 0x59, 0xb5, 0xdf, 0x84, 0x9b, 0x95, 0x19, + 0x79, 0xce, 0xdf, 0x9d, 0x0e, 0xd4, 0x75, 0x1a, 0x13, 0x8c, 0x54, 0x70, 0x1f, 0xcc, 0x66, 0x5e, + 0xa0, 0x5c, 0x74, 0x91, 0x06, 0x99, 0x85, 0xa6, 0x34, 0x8d, 0x72, 0x2f, 0xaf, 0x60, 0x3d, 0xe6, + 0x45, 0xa9, 0x75, 0x43, 0x59, 0x67, 0x29, 0xf7, 0x23, 0x1e, 0x21, 0xe1, 0xca, 0xc2, 0xd8, 0x79, + 0xee, 0xf5, 0x71, 0x04, 0xe4, 0x1e, 0xf4, 0x56, 0xe1, 0x22, 0xa0, 0xea, 0x71, 0x50, 0x2c, 0x54, + 0x1e, 0x4f, 0xa1, 0xd6, 0x63, 0xf2, 0x8a, 0x07, 0x77, 0x5d, 0x5b, 0xda, 0xa5, 0x29, 0xd5, 0x43, + 0x27, 0x89, 0xd6, 0x00, 0x48, 0x7e, 0xa3, 0x22, 0x4f, 0x54, 0xda, 0xc5, 0xab, 0x99, 0x79, 0x58, + 0x26, 0x56, 0x99, 0xfc, 0x9a, 0x5f, 0x9f, 0x63, 0xcf, 0xad, 0xb8, 0x20, 0x05, 0xbb, 0xb5, 0xb9, + 0x9f, 0x3c, 0x5c, 0xb9, 0x7d, 0xf9, 0x0c, 0x5b, 0x15, 0x31, 0x76, 0x5b, 0x6f, 0x68, 0x6c, 0xdb, + 0xc8, 0x82, 0xca, 0xec, 0x5b, 0x78, 0x1c, 0x51, 0xb8, 0x23, 0xc3, 0xa5, 0x24, 0xaa, 0xf1, 0x66, + 0xa8, 0xaa, 0x01, 0x66, 0x49, 0xa9, 0xc8, 0x31, 0x40, 0x8f, 0x49, 0xb5, 0x5d, 0x13, 0x12, 0x9a, + 0x65, 0x57, 0x6d, 0xd3, 0x48, 0xde, 0x98, 0x0b, 0x3e, 0xba, 0x27, 0x1d, 0x3c, 0xb8, 0x76, 0xb1, + 0xd3, 0xc6, 0xc6, 0x24, 0x9f, 0x5f, 0xb8, 0xcd, 0xec, 0xc0, 0x20, 0x17, 0x78, 0xbb, 0xd2, 0xcb, + 0x5d, 0xda, 0xc7, 0x7d, 0xe5, 0x30, 0x3f, 0x07, 0x86, 0x8f, 0x50, 0xf5, 0xf4, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x59, 0x59, 0x30, 0xa9, 0x07, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1187,6 +1326,7 @@ type BlockchainRPCClient interface { SubmitAttestation(ctx context.Context, in *Attestation, opts ...grpc.CallOption) (*empty.Empty, error) GetMempool(ctx context.Context, in *MempoolRequest, opts ...grpc.CallOption) (*BlockBody, error) GetValidatorInformation(ctx context.Context, in *GetValidatorRequest, opts ...grpc.CallOption) (*Validator, error) + GetConfigHash(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetConfigHashResponse, error) } type blockchainRPCClient struct { @@ -1323,6 +1463,15 @@ func (c *blockchainRPCClient) GetValidatorInformation(ctx context.Context, in *G return out, nil } +func (c *blockchainRPCClient) GetConfigHash(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetConfigHashResponse, error) { + out := new(GetConfigHashResponse) + err := c.cc.Invoke(ctx, "/pb.BlockchainRPC/GetConfigHash", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // BlockchainRPCServer is the server API for BlockchainRPC service. type BlockchainRPCServer interface { SubmitBlock(context.Context, *SubmitBlockRequest) (*SubmitBlockResponse, error) @@ -1339,6 +1488,7 @@ type BlockchainRPCServer interface { SubmitAttestation(context.Context, *Attestation) (*empty.Empty, error) GetMempool(context.Context, *MempoolRequest) (*BlockBody, error) GetValidatorInformation(context.Context, *GetValidatorRequest) (*Validator, error) + GetConfigHash(context.Context, *empty.Empty) (*GetConfigHashResponse, error) } func RegisterBlockchainRPCServer(s *grpc.Server, srv BlockchainRPCServer) { @@ -1597,6 +1747,24 @@ func _BlockchainRPC_GetValidatorInformation_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _BlockchainRPC_GetConfigHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BlockchainRPCServer).GetConfigHash(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BlockchainRPC/GetConfigHash", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BlockchainRPCServer).GetConfigHash(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + var _BlockchainRPC_serviceDesc = grpc.ServiceDesc{ ServiceName: "pb.BlockchainRPC", HandlerType: (*BlockchainRPCServer)(nil), @@ -1657,80 +1825,11 @@ var _BlockchainRPC_serviceDesc = grpc.ServiceDesc{ MethodName: "GetValidatorInformation", Handler: _BlockchainRPC_GetValidatorInformation_Handler, }, + { + MethodName: "GetConfigHash", + Handler: _BlockchainRPC_GetConfigHash_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "beaconrpc.proto", } - -func init() { proto.RegisterFile("beaconrpc.proto", fileDescriptor_beaconrpc_43e536a52cc0c434) } - -var fileDescriptor_beaconrpc_43e536a52cc0c434 = []byte{ - // 1059 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5d, 0x53, 0xdb, 0x46, - 0x17, 0x1e, 0x1b, 0x13, 0xf0, 0xb1, 0x05, 0x64, 0x71, 0xc0, 0x91, 0x09, 0x2f, 0xb3, 0x93, 0xbc, - 0x93, 0xe9, 0x87, 0x69, 0x21, 0x30, 0xc9, 0x4c, 0xbf, 0x1c, 0x1c, 0x1c, 0xd2, 0x34, 0x75, 0xe5, - 0xb4, 0x57, 0xbd, 0x91, 0xe5, 0x05, 0x34, 0x58, 0x5a, 0x57, 0xbb, 0xee, 0x84, 0xfb, 0xfe, 0x9d, - 0xfe, 0xa7, 0xfe, 0x94, 0x8e, 0x8e, 0x56, 0xd2, 0xca, 0x2b, 0x43, 0xef, 0xa4, 0xe7, 0x7c, 0xee, - 0x73, 0xce, 0x9e, 0x3d, 0xb0, 0x39, 0x66, 0xae, 0xc7, 0xc3, 0x68, 0xe6, 0x75, 0x67, 0x11, 0x97, - 0x9c, 0x54, 0x67, 0x63, 0xbb, 0x73, 0xc5, 0xf9, 0xd5, 0x94, 0x1d, 0x22, 0x32, 0x9e, 0x5f, 0x1e, - 0xb2, 0x60, 0x26, 0x6f, 0x13, 0x05, 0xbb, 0xe9, 0xf1, 0x20, 0xe0, 0x61, 0xf2, 0x47, 0x07, 0xb0, - 0x3b, 0x60, 0x72, 0x74, 0xed, 0x46, 0x93, 0x61, 0xc4, 0x67, 0x5c, 0xb0, 0xc8, 0x61, 0x7f, 0xcc, - 0x99, 0x90, 0xa4, 0x0d, 0x6b, 0x88, 0x5f, 0xf4, 0xdb, 0x95, 0x83, 0xca, 0xf3, 0x9a, 0x93, 0xfe, - 0x12, 0x02, 0xb5, 0xd1, 0x94, 0xcb, 0x76, 0x15, 0x61, 0xfc, 0xa6, 0x2e, 0x3c, 0x5a, 0xf0, 0x22, - 0x66, 0x3c, 0x14, 0x8c, 0xd8, 0xb0, 0x9e, 0x62, 0xe8, 0xc7, 0x72, 0xb2, 0x7f, 0xf2, 0x05, 0x3c, - 0x4c, 0xbf, 0x87, 0xf3, 0xf1, 0xd4, 0xf7, 0x7e, 0x64, 0xb7, 0xe8, 0xb5, 0xe9, 0x98, 0x02, 0x7a, - 0x0a, 0x1b, 0x3f, 0xb1, 0x60, 0xc6, 0xf9, 0x34, 0x4d, 0xf1, 0x29, 0x58, 0xef, 0x5d, 0x21, 0x5f, - 0x4f, 0xb9, 0x77, 0xf3, 0xd6, 0x15, 0xd7, 0x18, 0xa0, 0xe9, 0x14, 0x41, 0xfa, 0x0c, 0xb6, 0x07, - 0x4c, 0xfe, 0xe6, 0x4e, 0xfd, 0x89, 0x2b, 0x79, 0x76, 0xbe, 0x0d, 0xa8, 0xaa, 0xa3, 0x59, 0x4e, - 0xf5, 0xa2, 0x4f, 0x9f, 0xc1, 0xe6, 0x80, 0x25, 0x66, 0xa9, 0x0a, 0x81, 0x9a, 0xe6, 0x16, 0xbf, - 0xe9, 0x31, 0x6c, 0xe5, 0x6a, 0xea, 0x8c, 0xff, 0x83, 0x55, 0x04, 0x50, 0xb1, 0x71, 0x54, 0xef, - 0xce, 0xc6, 0xdd, 0x44, 0x23, 0xc1, 0xe9, 0x21, 0x3c, 0x1e, 0x30, 0x99, 0x1e, 0xe9, 0x9c, 0x47, - 0x31, 0x67, 0x5a, 0x14, 0xa4, 0xb3, 0xa2, 0xd1, 0xf9, 0x12, 0xec, 0x32, 0x83, 0xfb, 0x39, 0xa5, - 0xaf, 0x60, 0xf7, 0xcd, 0x8c, 0x7b, 0xd7, 0x17, 0xe1, 0x25, 0x8f, 0x02, 0x57, 0xfa, 0x3c, 0x4c, - 0x03, 0xed, 0x03, 0x28, 0xd1, 0x84, 0x7d, 0x52, 0xe1, 0x34, 0x84, 0xfe, 0x55, 0x81, 0xb6, 0x69, - 0xab, 0x62, 0x7e, 0x05, 0xdb, 0x6f, 0x5d, 0xb1, 0x28, 0x46, 0x2f, 0xeb, 0x4e, 0x99, 0x88, 0x9c, - 0x42, 0x43, 0xd7, 0xac, 0x22, 0x37, 0xad, 0x98, 0x1b, 0x23, 0x88, 0xae, 0x48, 0xff, 0xa9, 0xc1, - 0x96, 0xe1, 0xec, 0x23, 0xec, 0x62, 0x7f, 0x9d, 0xf1, 0x20, 0xf0, 0xa5, 0x64, 0x4c, 0x28, 0x52, - 0x44, 0xbb, 0x72, 0xb0, 0xf2, 0xbc, 0x71, 0x64, 0xc7, 0x8e, 0xcb, 0x55, 0x9c, 0x65, 0xa6, 0x85, - 0x4e, 0x5e, 0x49, 0xa8, 0x27, 0xaf, 0x60, 0xeb, 0xbd, 0x2b, 0x99, 0x90, 0x67, 0x11, 0x17, 0x62, - 0xea, 0x87, 0x37, 0xa2, 0xbd, 0x82, 0x21, 0xac, 0x38, 0x44, 0x86, 0x3a, 0x86, 0x1a, 0xf9, 0x3f, - 0x6c, 0xbc, 0x9b, 0x0b, 0xe9, 0x5f, 0xfa, 0x6c, 0x82, 0x27, 0x68, 0xd7, 0x90, 0xe4, 0x05, 0x34, - 0xee, 0xdb, 0x0c, 0xc1, 0x06, 0x5b, 0x4d, 0xfa, 0xb6, 0x00, 0xc6, 0xe5, 0xfa, 0xe8, 0x46, 0x57, - 0x4c, 0xa2, 0xca, 0x03, 0x54, 0xd1, 0x10, 0xd2, 0x05, 0x32, 0x8c, 0xd8, 0x9f, 0x3e, 0x9f, 0x0b, - 0x4d, 0x6f, 0x0d, 0xf5, 0x4a, 0x24, 0xe4, 0x14, 0x76, 0x52, 0x74, 0x21, 0xcb, 0x75, 0xcc, 0x72, - 0x89, 0x94, 0xbc, 0x80, 0x47, 0x86, 0x04, 0x43, 0xd5, 0x31, 0x54, 0xb9, 0x90, 0x7c, 0x9b, 0x67, - 0xa7, 0x11, 0x09, 0x65, 0x44, 0x96, 0x28, 0x92, 0xdf, 0xa1, 0x63, 0x16, 0xed, 0x03, 0xfb, 0x24, - 0x93, 0x8c, 0x1b, 0xf7, 0xd6, 0xfc, 0x2e, 0x73, 0xda, 0x05, 0xd2, 0xf7, 0x85, 0xc7, 0xc3, 0x90, - 0x79, 0xf9, 0xb5, 0x8a, 0x27, 0xde, 0xdc, 0xf3, 0x98, 0x10, 0xaa, 0xad, 0xd3, 0x5f, 0xfa, 0x35, - 0x74, 0x06, 0x4c, 0x9a, 0x41, 0xee, 0xb8, 0xc1, 0x7d, 0x38, 0x88, 0x27, 0xeb, 0x94, 0xcb, 0x5e, - 0x38, 0xc1, 0x5c, 0x7a, 0x42, 0xf8, 0x57, 0x61, 0xc0, 0xc2, 0xcc, 0xee, 0x00, 0x1a, 0xd9, 0x58, - 0xca, 0x66, 0x91, 0x0e, 0xd1, 0x13, 0x20, 0xa3, 0xf9, 0x38, 0xf0, 0x8b, 0x73, 0xe9, 0xde, 0x79, - 0x73, 0x0c, 0xdb, 0x05, 0x33, 0x75, 0xc0, 0x3d, 0xa8, 0x2f, 0xce, 0xca, 0x1c, 0xa0, 0x0e, 0x90, - 0x38, 0xdd, 0x0f, 0xf3, 0x60, 0xac, 0xcd, 0xef, 0x7d, 0x80, 0x1c, 0x4d, 0x87, 0x46, 0x8e, 0x14, - 0x7d, 0x56, 0x17, 0x7d, 0x9e, 0xe0, 0xec, 0xcd, 0xfe, 0xb5, 0x49, 0x74, 0x97, 0x53, 0xfa, 0x19, - 0xb4, 0x8a, 0x66, 0x2a, 0x99, 0xb2, 0x81, 0x7c, 0x84, 0xa3, 0x32, 0x23, 0xad, 0x27, 0x71, 0x98, - 0xa5, 0x91, 0x5a, 0xb0, 0x9a, 0x8f, 0x3b, 0xcb, 0x49, 0x7e, 0xe8, 0x3b, 0xac, 0xa7, 0x69, 0xa3, - 0xc2, 0x7c, 0x0e, 0xf5, 0x4c, 0xa6, 0x38, 0xc6, 0x96, 0xcd, 0xdf, 0x90, 0x5c, 0x4e, 0x7f, 0x85, - 0x27, 0x7a, 0x6f, 0x64, 0x02, 0xf1, 0x1f, 0x0f, 0x1b, 0xa7, 0x88, 0xfd, 0x81, 0xec, 0x59, 0x4e, - 0xf2, 0xa3, 0xde, 0x99, 0x91, 0x74, 0x25, 0xd3, 0xdf, 0x19, 0x11, 0x03, 0x7a, 0xdd, 0x13, 0x8d, - 0x04, 0xa7, 0x2f, 0x90, 0xb7, 0x04, 0xe2, 0xda, 0x83, 0xb1, 0x07, 0xf5, 0x0c, 0x4c, 0x0b, 0x9f, - 0x01, 0xf4, 0x67, 0xd8, 0x5f, 0x76, 0x02, 0x65, 0xff, 0x25, 0x40, 0x8e, 0xaa, 0x81, 0xbb, 0xc0, - 0x88, 0xa6, 0x40, 0xcf, 0xe1, 0x69, 0xa9, 0xc3, 0x8b, 0x70, 0xe2, 0x7b, 0x4c, 0xe8, 0xbd, 0xb5, - 0xe0, 0xd6, 0xd2, 0xfd, 0x1c, 0xfd, 0xbd, 0x06, 0x16, 0x36, 0x81, 0x77, 0xed, 0xfa, 0xa1, 0x33, - 0x3c, 0x23, 0xdf, 0x41, 0x43, 0x6b, 0x6c, 0xb2, 0x83, 0x0c, 0x18, 0x17, 0xc4, 0xde, 0x35, 0x70, - 0x15, 0xf1, 0x7b, 0xb0, 0xd4, 0xad, 0x54, 0xe4, 0xef, 0x74, 0x93, 0x65, 0xa9, 0x9b, 0x2e, 0x4b, - 0xdd, 0x37, 0xf1, 0xb2, 0x64, 0x27, 0x9e, 0xcd, 0xeb, 0xd0, 0x83, 0xa6, 0xde, 0x99, 0x04, 0x23, - 0x95, 0xb4, 0xb8, 0xdd, 0x36, 0x05, 0xca, 0x45, 0x1f, 0x2b, 0x5b, 0xd8, 0x51, 0x96, 0xa6, 0xb1, - 0xdc, 0xcb, 0x4b, 0x58, 0x4f, 0x4b, 0xbd, 0xd4, 0xba, 0xa5, 0xac, 0x8b, 0x5d, 0xf4, 0x03, 0x1e, - 0x21, 0x2b, 0xff, 0xbd, 0xb1, 0xcd, 0x76, 0x1a, 0xe2, 0xad, 0x36, 0xde, 0xe8, 0x4e, 0xe9, 0xdb, - 0xae, 0xf8, 0xd8, 0x2b, 0x17, 0x2a, 0x8f, 0xc7, 0xd0, 0x18, 0x30, 0x79, 0xce, 0xa3, 0x9b, 0xbe, - 0x2b, 0xdd, 0xa5, 0x29, 0x35, 0x63, 0x27, 0x99, 0xd6, 0x08, 0x88, 0xb9, 0x24, 0x91, 0x27, 0x2a, - 0xed, 0xf2, 0x6d, 0xcb, 0xde, 0x5f, 0x26, 0x56, 0x99, 0xfc, 0x62, 0x6e, 0xc4, 0xa9, 0xe7, 0x4e, - 0x4a, 0x48, 0xc9, 0xba, 0x6c, 0x3f, 0xce, 0xde, 0x22, 0x63, 0x05, 0x3e, 0xc1, 0x52, 0x25, 0x1d, - 0xbb, 0xad, 0x17, 0x34, 0xb5, 0x6d, 0x15, 0x41, 0x65, 0xf6, 0x0d, 0x3c, 0x4c, 0x5a, 0xb8, 0x27, - 0xe3, 0x3d, 0x23, 0xe1, 0x78, 0x33, 0x56, 0xd5, 0x00, 0x7b, 0x09, 0x55, 0xe4, 0x10, 0x60, 0xc0, - 0xa4, 0x5a, 0x98, 0x09, 0x89, 0xcd, 0x8a, 0xdb, 0xb3, 0x6d, 0x65, 0xcf, 0xc6, 0x6b, 0x3e, 0xb9, - 0x25, 0x3d, 0x3c, 0xb8, 0x76, 0x57, 0xf3, 0xc2, 0xa6, 0x4d, 0xbe, 0xb8, 0x43, 0xdb, 0xc5, 0x19, - 0x30, 0x7e, 0x80, 0x39, 0x1c, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x48, 0x05, 0x81, 0x96, - 0x0c, 0x00, 0x00, -} diff --git a/pb/beaconrpc.proto b/pb/beaconrpc.proto index 6411c607..6df8b443 100644 --- a/pb/beaconrpc.proto +++ b/pb/beaconrpc.proto @@ -33,6 +33,8 @@ service BlockchainRPC { rpc GetMempool(MempoolRequest) returns (BlockBody); rpc GetValidatorInformation(GetValidatorRequest) returns (Validator); + + rpc GetConfigHash(google.protobuf.Empty) returns (GetConfigHashResponse); } message GetShardProposerRequest { @@ -153,3 +155,8 @@ message GetCommitteeValidatorsResponse { message GetCommitteeValidatorIndicesResponse { repeated uint32 Validators = 1; } + +message GetConfigHashResponse { + bytes Hash = 1; +} + diff --git a/pb/common.pb.go b/pb/common.pb.go index e61520b8..d4f35cb6 100644 --- a/pb/common.pb.go +++ b/pb/common.pb.go @@ -3,9 +3,11 @@ package pb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -31,16 +33,17 @@ func (m *ProposalSignedData) Reset() { *m = ProposalSignedData{} } func (m *ProposalSignedData) String() string { return proto.CompactTextString(m) } func (*ProposalSignedData) ProtoMessage() {} func (*ProposalSignedData) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{0} + return fileDescriptor_555bd8c177793206, []int{0} } + func (m *ProposalSignedData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProposalSignedData.Unmarshal(m, b) } func (m *ProposalSignedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ProposalSignedData.Marshal(b, m, deterministic) } -func (dst *ProposalSignedData) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProposalSignedData.Merge(dst, src) +func (m *ProposalSignedData) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProposalSignedData.Merge(m, src) } func (m *ProposalSignedData) XXX_Size() int { return xxx_messageInfo_ProposalSignedData.Size(m) @@ -87,16 +90,17 @@ func (m *ProposerSlashing) Reset() { *m = ProposerSlashing{} } func (m *ProposerSlashing) String() string { return proto.CompactTextString(m) } func (*ProposerSlashing) ProtoMessage() {} func (*ProposerSlashing) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{1} + return fileDescriptor_555bd8c177793206, []int{1} } + func (m *ProposerSlashing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProposerSlashing.Unmarshal(m, b) } func (m *ProposerSlashing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ProposerSlashing.Marshal(b, m, deterministic) } -func (dst *ProposerSlashing) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProposerSlashing.Merge(dst, src) +func (m *ProposerSlashing) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProposerSlashing.Merge(m, src) } func (m *ProposerSlashing) XXX_Size() int { return xxx_messageInfo_ProposerSlashing.Size(m) @@ -156,16 +160,17 @@ func (m *SlashableVoteData) Reset() { *m = SlashableVoteData{} } func (m *SlashableVoteData) String() string { return proto.CompactTextString(m) } func (*SlashableVoteData) ProtoMessage() {} func (*SlashableVoteData) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{2} + return fileDescriptor_555bd8c177793206, []int{2} } + func (m *SlashableVoteData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlashableVoteData.Unmarshal(m, b) } func (m *SlashableVoteData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SlashableVoteData.Marshal(b, m, deterministic) } -func (dst *SlashableVoteData) XXX_Merge(src proto.Message) { - xxx_messageInfo_SlashableVoteData.Merge(dst, src) +func (m *SlashableVoteData) XXX_Merge(src proto.Message) { + xxx_messageInfo_SlashableVoteData.Merge(m, src) } func (m *SlashableVoteData) XXX_Size() int { return xxx_messageInfo_SlashableVoteData.Size(m) @@ -216,16 +221,17 @@ func (m *CasperSlashing) Reset() { *m = CasperSlashing{} } func (m *CasperSlashing) String() string { return proto.CompactTextString(m) } func (*CasperSlashing) ProtoMessage() {} func (*CasperSlashing) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{3} + return fileDescriptor_555bd8c177793206, []int{3} } + func (m *CasperSlashing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CasperSlashing.Unmarshal(m, b) } func (m *CasperSlashing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_CasperSlashing.Marshal(b, m, deterministic) } -func (dst *CasperSlashing) XXX_Merge(src proto.Message) { - xxx_messageInfo_CasperSlashing.Merge(dst, src) +func (m *CasperSlashing) XXX_Merge(src proto.Message) { + xxx_messageInfo_CasperSlashing.Merge(m, src) } func (m *CasperSlashing) XXX_Size() int { return xxx_messageInfo_CasperSlashing.Size(m) @@ -271,16 +277,17 @@ func (m *AttestationData) Reset() { *m = AttestationData{} } func (m *AttestationData) String() string { return proto.CompactTextString(m) } func (*AttestationData) ProtoMessage() {} func (*AttestationData) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{4} + return fileDescriptor_555bd8c177793206, []int{4} } + func (m *AttestationData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AttestationData.Unmarshal(m, b) } func (m *AttestationData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AttestationData.Marshal(b, m, deterministic) } -func (dst *AttestationData) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttestationData.Merge(dst, src) +func (m *AttestationData) XXX_Merge(src proto.Message) { + xxx_messageInfo_AttestationData.Merge(m, src) } func (m *AttestationData) XXX_Size() int { return xxx_messageInfo_AttestationData.Size(m) @@ -366,16 +373,17 @@ func (m *AttestationDataAndCustodyBit) Reset() { *m = AttestationDataAnd func (m *AttestationDataAndCustodyBit) String() string { return proto.CompactTextString(m) } func (*AttestationDataAndCustodyBit) ProtoMessage() {} func (*AttestationDataAndCustodyBit) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{5} + return fileDescriptor_555bd8c177793206, []int{5} } + func (m *AttestationDataAndCustodyBit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AttestationDataAndCustodyBit.Unmarshal(m, b) } func (m *AttestationDataAndCustodyBit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AttestationDataAndCustodyBit.Marshal(b, m, deterministic) } -func (dst *AttestationDataAndCustodyBit) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttestationDataAndCustodyBit.Merge(dst, src) +func (m *AttestationDataAndCustodyBit) XXX_Merge(src proto.Message) { + xxx_messageInfo_AttestationDataAndCustodyBit.Merge(m, src) } func (m *AttestationDataAndCustodyBit) XXX_Size() int { return xxx_messageInfo_AttestationDataAndCustodyBit.Size(m) @@ -414,16 +422,17 @@ func (m *Attestation) Reset() { *m = Attestation{} } func (m *Attestation) String() string { return proto.CompactTextString(m) } func (*Attestation) ProtoMessage() {} func (*Attestation) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{6} + return fileDescriptor_555bd8c177793206, []int{6} } + func (m *Attestation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Attestation.Unmarshal(m, b) } func (m *Attestation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Attestation.Marshal(b, m, deterministic) } -func (dst *Attestation) XXX_Merge(src proto.Message) { - xxx_messageInfo_Attestation.Merge(dst, src) +func (m *Attestation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Attestation.Merge(m, src) } func (m *Attestation) XXX_Size() int { return xxx_messageInfo_Attestation.Size(m) @@ -475,16 +484,17 @@ func (m *DepositParameters) Reset() { *m = DepositParameters{} } func (m *DepositParameters) String() string { return proto.CompactTextString(m) } func (*DepositParameters) ProtoMessage() {} func (*DepositParameters) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{7} + return fileDescriptor_555bd8c177793206, []int{7} } + func (m *DepositParameters) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepositParameters.Unmarshal(m, b) } func (m *DepositParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DepositParameters.Marshal(b, m, deterministic) } -func (dst *DepositParameters) XXX_Merge(src proto.Message) { - xxx_messageInfo_DepositParameters.Merge(dst, src) +func (m *DepositParameters) XXX_Merge(src proto.Message) { + xxx_messageInfo_DepositParameters.Merge(m, src) } func (m *DepositParameters) XXX_Size() int { return xxx_messageInfo_DepositParameters.Size(m) @@ -527,16 +537,17 @@ func (m *Deposit) Reset() { *m = Deposit{} } func (m *Deposit) String() string { return proto.CompactTextString(m) } func (*Deposit) ProtoMessage() {} func (*Deposit) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{8} + return fileDescriptor_555bd8c177793206, []int{8} } + func (m *Deposit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Deposit.Unmarshal(m, b) } func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Deposit.Marshal(b, m, deterministic) } -func (dst *Deposit) XXX_Merge(src proto.Message) { - xxx_messageInfo_Deposit.Merge(dst, src) +func (m *Deposit) XXX_Merge(src proto.Message) { + xxx_messageInfo_Deposit.Merge(m, src) } func (m *Deposit) XXX_Size() int { return xxx_messageInfo_Deposit.Size(m) @@ -567,16 +578,17 @@ func (m *Exit) Reset() { *m = Exit{} } func (m *Exit) String() string { return proto.CompactTextString(m) } func (*Exit) ProtoMessage() {} func (*Exit) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{9} + return fileDescriptor_555bd8c177793206, []int{9} } + func (m *Exit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Exit.Unmarshal(m, b) } func (m *Exit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Exit.Marshal(b, m, deterministic) } -func (dst *Exit) XXX_Merge(src proto.Message) { - xxx_messageInfo_Exit.Merge(dst, src) +func (m *Exit) XXX_Merge(src proto.Message) { + xxx_messageInfo_Exit.Merge(m, src) } func (m *Exit) XXX_Size() int { return xxx_messageInfo_Exit.Size(m) @@ -620,16 +632,17 @@ func (m *Block) Reset() { *m = Block{} } func (m *Block) String() string { return proto.CompactTextString(m) } func (*Block) ProtoMessage() {} func (*Block) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{10} + return fileDescriptor_555bd8c177793206, []int{10} } + func (m *Block) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Block.Unmarshal(m, b) } func (m *Block) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Block.Marshal(b, m, deterministic) } -func (dst *Block) XXX_Merge(src proto.Message) { - xxx_messageInfo_Block.Merge(dst, src) +func (m *Block) XXX_Merge(src proto.Message) { + xxx_messageInfo_Block.Merge(m, src) } func (m *Block) XXX_Size() int { return xxx_messageInfo_Block.Size(m) @@ -669,16 +682,17 @@ func (m *BlockHeader) Reset() { *m = BlockHeader{} } func (m *BlockHeader) String() string { return proto.CompactTextString(m) } func (*BlockHeader) ProtoMessage() {} func (*BlockHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{11} + return fileDescriptor_555bd8c177793206, []int{11} } + func (m *BlockHeader) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockHeader.Unmarshal(m, b) } func (m *BlockHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BlockHeader.Marshal(b, m, deterministic) } -func (dst *BlockHeader) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlockHeader.Merge(dst, src) +func (m *BlockHeader) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlockHeader.Merge(m, src) } func (m *BlockHeader) XXX_Size() int { return xxx_messageInfo_BlockHeader.Size(m) @@ -740,16 +754,17 @@ func (m *BlockBody) Reset() { *m = BlockBody{} } func (m *BlockBody) String() string { return proto.CompactTextString(m) } func (*BlockBody) ProtoMessage() {} func (*BlockBody) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{12} + return fileDescriptor_555bd8c177793206, []int{12} } + func (m *BlockBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockBody.Unmarshal(m, b) } func (m *BlockBody) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BlockBody.Marshal(b, m, deterministic) } -func (dst *BlockBody) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlockBody.Merge(dst, src) +func (m *BlockBody) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlockBody.Merge(m, src) } func (m *BlockBody) XXX_Size() int { return xxx_messageInfo_BlockBody.Size(m) @@ -815,16 +830,17 @@ func (m *ForkData) Reset() { *m = ForkData{} } func (m *ForkData) String() string { return proto.CompactTextString(m) } func (*ForkData) ProtoMessage() {} func (*ForkData) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{13} + return fileDescriptor_555bd8c177793206, []int{13} } + func (m *ForkData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ForkData.Unmarshal(m, b) } func (m *ForkData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ForkData.Marshal(b, m, deterministic) } -func (dst *ForkData) XXX_Merge(src proto.Message) { - xxx_messageInfo_ForkData.Merge(dst, src) +func (m *ForkData) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForkData.Merge(m, src) } func (m *ForkData) XXX_Size() int { return xxx_messageInfo_ForkData.Size(m) @@ -873,16 +889,17 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{14} + return fileDescriptor_555bd8c177793206, []int{14} } + func (m *Validator) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Validator.Unmarshal(m, b) } func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Validator.Marshal(b, m, deterministic) } -func (dst *Validator) XXX_Merge(src proto.Message) { - xxx_messageInfo_Validator.Merge(dst, src) +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) } func (m *Validator) XXX_Size() int { return xxx_messageInfo_Validator.Size(m) @@ -955,16 +972,17 @@ func (m *ShardCommittee) Reset() { *m = ShardCommittee{} } func (m *ShardCommittee) String() string { return proto.CompactTextString(m) } func (*ShardCommittee) ProtoMessage() {} func (*ShardCommittee) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{15} + return fileDescriptor_555bd8c177793206, []int{15} } + func (m *ShardCommittee) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardCommittee.Unmarshal(m, b) } func (m *ShardCommittee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardCommittee.Marshal(b, m, deterministic) } -func (dst *ShardCommittee) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardCommittee.Merge(dst, src) +func (m *ShardCommittee) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardCommittee.Merge(m, src) } func (m *ShardCommittee) XXX_Size() int { return xxx_messageInfo_ShardCommittee.Size(m) @@ -1007,16 +1025,17 @@ func (m *ShardCommitteesForSlot) Reset() { *m = ShardCommitteesForSlot{} func (m *ShardCommitteesForSlot) String() string { return proto.CompactTextString(m) } func (*ShardCommitteesForSlot) ProtoMessage() {} func (*ShardCommitteesForSlot) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{16} + return fileDescriptor_555bd8c177793206, []int{16} } + func (m *ShardCommitteesForSlot) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardCommitteesForSlot.Unmarshal(m, b) } func (m *ShardCommitteesForSlot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardCommitteesForSlot.Marshal(b, m, deterministic) } -func (dst *ShardCommitteesForSlot) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardCommitteesForSlot.Merge(dst, src) +func (m *ShardCommitteesForSlot) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardCommitteesForSlot.Merge(m, src) } func (m *ShardCommitteesForSlot) XXX_Size() int { return xxx_messageInfo_ShardCommitteesForSlot.Size(m) @@ -1045,16 +1064,17 @@ func (m *PersistentCommitteesForSlot) Reset() { *m = PersistentCommittee func (m *PersistentCommitteesForSlot) String() string { return proto.CompactTextString(m) } func (*PersistentCommitteesForSlot) ProtoMessage() {} func (*PersistentCommitteesForSlot) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{17} + return fileDescriptor_555bd8c177793206, []int{17} } + func (m *PersistentCommitteesForSlot) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PersistentCommitteesForSlot.Unmarshal(m, b) } func (m *PersistentCommitteesForSlot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_PersistentCommitteesForSlot.Marshal(b, m, deterministic) } -func (dst *PersistentCommitteesForSlot) XXX_Merge(src proto.Message) { - xxx_messageInfo_PersistentCommitteesForSlot.Merge(dst, src) +func (m *PersistentCommitteesForSlot) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentCommitteesForSlot.Merge(m, src) } func (m *PersistentCommitteesForSlot) XXX_Size() int { return xxx_messageInfo_PersistentCommitteesForSlot.Size(m) @@ -1085,16 +1105,17 @@ func (m *Crosslink) Reset() { *m = Crosslink{} } func (m *Crosslink) String() string { return proto.CompactTextString(m) } func (*Crosslink) ProtoMessage() {} func (*Crosslink) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{18} + return fileDescriptor_555bd8c177793206, []int{18} } + func (m *Crosslink) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Crosslink.Unmarshal(m, b) } func (m *Crosslink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Crosslink.Marshal(b, m, deterministic) } -func (dst *Crosslink) XXX_Merge(src proto.Message) { - xxx_messageInfo_Crosslink.Merge(dst, src) +func (m *Crosslink) XXX_Merge(src proto.Message) { + xxx_messageInfo_Crosslink.Merge(m, src) } func (m *Crosslink) XXX_Size() int { return xxx_messageInfo_Crosslink.Size(m) @@ -1141,16 +1162,17 @@ func (m *PendingAttestation) Reset() { *m = PendingAttestation{} } func (m *PendingAttestation) String() string { return proto.CompactTextString(m) } func (*PendingAttestation) ProtoMessage() {} func (*PendingAttestation) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{19} + return fileDescriptor_555bd8c177793206, []int{19} } + func (m *PendingAttestation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PendingAttestation.Unmarshal(m, b) } func (m *PendingAttestation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_PendingAttestation.Marshal(b, m, deterministic) } -func (dst *PendingAttestation) XXX_Merge(src proto.Message) { - xxx_messageInfo_PendingAttestation.Merge(dst, src) +func (m *PendingAttestation) XXX_Merge(src proto.Message) { + xxx_messageInfo_PendingAttestation.Merge(m, src) } func (m *PendingAttestation) XXX_Size() int { return xxx_messageInfo_PendingAttestation.Size(m) @@ -1231,16 +1253,17 @@ func (m *State) Reset() { *m = State{} } func (m *State) String() string { return proto.CompactTextString(m) } func (*State) ProtoMessage() {} func (*State) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{20} + return fileDescriptor_555bd8c177793206, []int{20} } + func (m *State) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_State.Unmarshal(m, b) } func (m *State) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_State.Marshal(b, m, deterministic) } -func (dst *State) XXX_Merge(src proto.Message) { - xxx_messageInfo_State.Merge(dst, src) +func (m *State) XXX_Merge(src proto.Message) { + xxx_messageInfo_State.Merge(m, src) } func (m *State) XXX_Size() int { return xxx_messageInfo_State.Size(m) @@ -1440,16 +1463,17 @@ func (m *ValidatorRegistryDeltaBlock) Reset() { *m = ValidatorRegistryDe func (m *ValidatorRegistryDeltaBlock) String() string { return proto.CompactTextString(m) } func (*ValidatorRegistryDeltaBlock) ProtoMessage() {} func (*ValidatorRegistryDeltaBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{21} + return fileDescriptor_555bd8c177793206, []int{21} } + func (m *ValidatorRegistryDeltaBlock) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ValidatorRegistryDeltaBlock.Unmarshal(m, b) } func (m *ValidatorRegistryDeltaBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ValidatorRegistryDeltaBlock.Marshal(b, m, deterministic) } -func (dst *ValidatorRegistryDeltaBlock) XXX_Merge(src proto.Message) { - xxx_messageInfo_ValidatorRegistryDeltaBlock.Merge(dst, src) +func (m *ValidatorRegistryDeltaBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatorRegistryDeltaBlock.Merge(m, src) } func (m *ValidatorRegistryDeltaBlock) XXX_Size() int { return xxx_messageInfo_ValidatorRegistryDeltaBlock.Size(m) @@ -1500,16 +1524,17 @@ func (m *AttestationRequest) Reset() { *m = AttestationRequest{} } func (m *AttestationRequest) String() string { return proto.CompactTextString(m) } func (*AttestationRequest) ProtoMessage() {} func (*AttestationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{22} + return fileDescriptor_555bd8c177793206, []int{22} } + func (m *AttestationRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AttestationRequest.Unmarshal(m, b) } func (m *AttestationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AttestationRequest.Marshal(b, m, deterministic) } -func (dst *AttestationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttestationRequest.Merge(dst, src) +func (m *AttestationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AttestationRequest.Merge(m, src) } func (m *AttestationRequest) XXX_Size() int { return xxx_messageInfo_AttestationRequest.Size(m) @@ -1541,16 +1566,17 @@ func (m *VoteData) Reset() { *m = VoteData{} } func (m *VoteData) String() string { return proto.CompactTextString(m) } func (*VoteData) ProtoMessage() {} func (*VoteData) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{23} + return fileDescriptor_555bd8c177793206, []int{23} } + func (m *VoteData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VoteData.Unmarshal(m, b) } func (m *VoteData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_VoteData.Marshal(b, m, deterministic) } -func (dst *VoteData) XXX_Merge(src proto.Message) { - xxx_messageInfo_VoteData.Merge(dst, src) +func (m *VoteData) XXX_Merge(src proto.Message) { + xxx_messageInfo_VoteData.Merge(m, src) } func (m *VoteData) XXX_Size() int { return xxx_messageInfo_VoteData.Size(m) @@ -1602,16 +1628,17 @@ func (m *AggregatedVote) Reset() { *m = AggregatedVote{} } func (m *AggregatedVote) String() string { return proto.CompactTextString(m) } func (*AggregatedVote) ProtoMessage() {} func (*AggregatedVote) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{24} + return fileDescriptor_555bd8c177793206, []int{24} } + func (m *AggregatedVote) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AggregatedVote.Unmarshal(m, b) } func (m *AggregatedVote) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AggregatedVote.Marshal(b, m, deterministic) } -func (dst *AggregatedVote) XXX_Merge(src proto.Message) { - xxx_messageInfo_AggregatedVote.Merge(dst, src) +func (m *AggregatedVote) XXX_Merge(src proto.Message) { + xxx_messageInfo_AggregatedVote.Merge(m, src) } func (m *AggregatedVote) XXX_Size() int { return xxx_messageInfo_AggregatedVote.Size(m) @@ -1657,16 +1684,17 @@ func (m *ActiveProposal) Reset() { *m = ActiveProposal{} } func (m *ActiveProposal) String() string { return proto.CompactTextString(m) } func (*ActiveProposal) ProtoMessage() {} func (*ActiveProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{25} + return fileDescriptor_555bd8c177793206, []int{25} } + func (m *ActiveProposal) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ActiveProposal.Unmarshal(m, b) } func (m *ActiveProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ActiveProposal.Marshal(b, m, deterministic) } -func (dst *ActiveProposal) XXX_Merge(src proto.Message) { - xxx_messageInfo_ActiveProposal.Merge(dst, src) +func (m *ActiveProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActiveProposal.Merge(m, src) } func (m *ActiveProposal) XXX_Size() int { return xxx_messageInfo_ActiveProposal.Size(m) @@ -1717,16 +1745,17 @@ func (m *ShardBlock) Reset() { *m = ShardBlock{} } func (m *ShardBlock) String() string { return proto.CompactTextString(m) } func (*ShardBlock) ProtoMessage() {} func (*ShardBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{26} + return fileDescriptor_555bd8c177793206, []int{26} } + func (m *ShardBlock) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardBlock.Unmarshal(m, b) } func (m *ShardBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardBlock.Marshal(b, m, deterministic) } -func (dst *ShardBlock) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardBlock.Merge(dst, src) +func (m *ShardBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardBlock.Merge(m, src) } func (m *ShardBlock) XXX_Size() int { return xxx_messageInfo_ShardBlock.Size(m) @@ -1767,16 +1796,17 @@ func (m *ShardBlockHeader) Reset() { *m = ShardBlockHeader{} } func (m *ShardBlockHeader) String() string { return proto.CompactTextString(m) } func (*ShardBlockHeader) ProtoMessage() {} func (*ShardBlockHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{27} + return fileDescriptor_555bd8c177793206, []int{27} } + func (m *ShardBlockHeader) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardBlockHeader.Unmarshal(m, b) } func (m *ShardBlockHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardBlockHeader.Marshal(b, m, deterministic) } -func (dst *ShardBlockHeader) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardBlockHeader.Merge(dst, src) +func (m *ShardBlockHeader) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardBlockHeader.Merge(m, src) } func (m *ShardBlockHeader) XXX_Size() int { return xxx_messageInfo_ShardBlockHeader.Size(m) @@ -1840,16 +1870,17 @@ func (m *ShardBlockBody) Reset() { *m = ShardBlockBody{} } func (m *ShardBlockBody) String() string { return proto.CompactTextString(m) } func (*ShardBlockBody) ProtoMessage() {} func (*ShardBlockBody) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{28} + return fileDescriptor_555bd8c177793206, []int{28} } + func (m *ShardBlockBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardBlockBody.Unmarshal(m, b) } func (m *ShardBlockBody) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardBlockBody.Marshal(b, m, deterministic) } -func (dst *ShardBlockBody) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardBlockBody.Merge(dst, src) +func (m *ShardBlockBody) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardBlockBody.Merge(m, src) } func (m *ShardBlockBody) XXX_Size() int { return xxx_messageInfo_ShardBlockBody.Size(m) @@ -1878,16 +1909,17 @@ func (m *ShardTransaction) Reset() { *m = ShardTransaction{} } func (m *ShardTransaction) String() string { return proto.CompactTextString(m) } func (*ShardTransaction) ProtoMessage() {} func (*ShardTransaction) Descriptor() ([]byte, []int) { - return fileDescriptor_common_bc32d941759847ca, []int{29} + return fileDescriptor_555bd8c177793206, []int{29} } + func (m *ShardTransaction) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardTransaction.Unmarshal(m, b) } func (m *ShardTransaction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardTransaction.Marshal(b, m, deterministic) } -func (dst *ShardTransaction) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardTransaction.Merge(dst, src) +func (m *ShardTransaction) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardTransaction.Merge(m, src) } func (m *ShardTransaction) XXX_Size() int { return xxx_messageInfo_ShardTransaction.Size(m) @@ -1938,9 +1970,9 @@ func init() { proto.RegisterType((*ShardTransaction)(nil), "pb.ShardTransaction") } -func init() { proto.RegisterFile("common.proto", fileDescriptor_common_bc32d941759847ca) } +func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) } -var fileDescriptor_common_bc32d941759847ca = []byte{ +var fileDescriptor_555bd8c177793206 = []byte{ // 1820 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4f, 0x6f, 0x1c, 0x49, 0x15, 0x57, 0x4f, 0x66, 0x1c, 0xfb, 0xcd, 0xd8, 0x8e, 0x2b, 0x89, 0xd3, 0x9b, 0x5d, 0x22, 0xd3, diff --git a/pb/p2p.pb.go b/pb/p2p.pb.go index f812c545..1870f8d6 100644 --- a/pb/p2p.pb.go +++ b/pb/p2p.pb.go @@ -3,9 +3,11 @@ package pb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -33,16 +35,17 @@ func (m *VersionMessage) Reset() { *m = VersionMessage{} } func (m *VersionMessage) String() string { return proto.CompactTextString(m) } func (*VersionMessage) ProtoMessage() {} func (*VersionMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{0} + return fileDescriptor_e7fdddb109e6467a, []int{0} } + func (m *VersionMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VersionMessage.Unmarshal(m, b) } func (m *VersionMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_VersionMessage.Marshal(b, m, deterministic) } -func (dst *VersionMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_VersionMessage.Merge(dst, src) +func (m *VersionMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_VersionMessage.Merge(m, src) } func (m *VersionMessage) XXX_Size() int { return xxx_messageInfo_VersionMessage.Size(m) @@ -99,16 +102,17 @@ func (m *PingMessage) Reset() { *m = PingMessage{} } func (m *PingMessage) String() string { return proto.CompactTextString(m) } func (*PingMessage) ProtoMessage() {} func (*PingMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{1} + return fileDescriptor_e7fdddb109e6467a, []int{1} } + func (m *PingMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PingMessage.Unmarshal(m, b) } func (m *PingMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_PingMessage.Marshal(b, m, deterministic) } -func (dst *PingMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingMessage.Merge(dst, src) +func (m *PingMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_PingMessage.Merge(m, src) } func (m *PingMessage) XXX_Size() int { return xxx_messageInfo_PingMessage.Size(m) @@ -137,16 +141,17 @@ func (m *PongMessage) Reset() { *m = PongMessage{} } func (m *PongMessage) String() string { return proto.CompactTextString(m) } func (*PongMessage) ProtoMessage() {} func (*PongMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{2} + return fileDescriptor_e7fdddb109e6467a, []int{2} } + func (m *PongMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PongMessage.Unmarshal(m, b) } func (m *PongMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_PongMessage.Marshal(b, m, deterministic) } -func (dst *PongMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_PongMessage.Merge(dst, src) +func (m *PongMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_PongMessage.Merge(m, src) } func (m *PongMessage) XXX_Size() int { return xxx_messageInfo_PongMessage.Size(m) @@ -175,16 +180,17 @@ func (m *RejectMessage) Reset() { *m = RejectMessage{} } func (m *RejectMessage) String() string { return proto.CompactTextString(m) } func (*RejectMessage) ProtoMessage() {} func (*RejectMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{3} + return fileDescriptor_e7fdddb109e6467a, []int{3} } + func (m *RejectMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RejectMessage.Unmarshal(m, b) } func (m *RejectMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RejectMessage.Marshal(b, m, deterministic) } -func (dst *RejectMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_RejectMessage.Merge(dst, src) +func (m *RejectMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_RejectMessage.Merge(m, src) } func (m *RejectMessage) XXX_Size() int { return xxx_messageInfo_RejectMessage.Size(m) @@ -214,16 +220,17 @@ func (m *AttestationMempoolItem) Reset() { *m = AttestationMempoolItem{} func (m *AttestationMempoolItem) String() string { return proto.CompactTextString(m) } func (*AttestationMempoolItem) ProtoMessage() {} func (*AttestationMempoolItem) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{4} + return fileDescriptor_e7fdddb109e6467a, []int{4} } + func (m *AttestationMempoolItem) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AttestationMempoolItem.Unmarshal(m, b) } func (m *AttestationMempoolItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AttestationMempoolItem.Marshal(b, m, deterministic) } -func (dst *AttestationMempoolItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttestationMempoolItem.Merge(dst, src) +func (m *AttestationMempoolItem) XXX_Merge(src proto.Message) { + xxx_messageInfo_AttestationMempoolItem.Merge(m, src) } func (m *AttestationMempoolItem) XXX_Size() int { return xxx_messageInfo_AttestationMempoolItem.Size(m) @@ -260,16 +267,17 @@ func (m *GetMempoolMessage) Reset() { *m = GetMempoolMessage{} } func (m *GetMempoolMessage) String() string { return proto.CompactTextString(m) } func (*GetMempoolMessage) ProtoMessage() {} func (*GetMempoolMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{5} + return fileDescriptor_e7fdddb109e6467a, []int{5} } + func (m *GetMempoolMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMempoolMessage.Unmarshal(m, b) } func (m *GetMempoolMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetMempoolMessage.Marshal(b, m, deterministic) } -func (dst *GetMempoolMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetMempoolMessage.Merge(dst, src) +func (m *GetMempoolMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMempoolMessage.Merge(m, src) } func (m *GetMempoolMessage) XXX_Size() int { return xxx_messageInfo_GetMempoolMessage.Size(m) @@ -299,16 +307,17 @@ func (m *GetBlockMessage) Reset() { *m = GetBlockMessage{} } func (m *GetBlockMessage) String() string { return proto.CompactTextString(m) } func (*GetBlockMessage) ProtoMessage() {} func (*GetBlockMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{6} + return fileDescriptor_e7fdddb109e6467a, []int{6} } + func (m *GetBlockMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetBlockMessage.Unmarshal(m, b) } func (m *GetBlockMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetBlockMessage.Marshal(b, m, deterministic) } -func (dst *GetBlockMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBlockMessage.Merge(dst, src) +func (m *GetBlockMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockMessage.Merge(m, src) } func (m *GetBlockMessage) XXX_Size() int { return xxx_messageInfo_GetBlockMessage.Size(m) @@ -344,16 +353,17 @@ func (m *MempoolMessage) Reset() { *m = MempoolMessage{} } func (m *MempoolMessage) String() string { return proto.CompactTextString(m) } func (*MempoolMessage) ProtoMessage() {} func (*MempoolMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{7} + return fileDescriptor_e7fdddb109e6467a, []int{7} } + func (m *MempoolMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MempoolMessage.Unmarshal(m, b) } func (m *MempoolMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MempoolMessage.Marshal(b, m, deterministic) } -func (dst *MempoolMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_MempoolMessage.Merge(dst, src) +func (m *MempoolMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_MempoolMessage.Merge(m, src) } func (m *MempoolMessage) XXX_Size() int { return xxx_messageInfo_MempoolMessage.Size(m) @@ -384,16 +394,17 @@ func (m *BlockMessage) Reset() { *m = BlockMessage{} } func (m *BlockMessage) String() string { return proto.CompactTextString(m) } func (*BlockMessage) ProtoMessage() {} func (*BlockMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{8} + return fileDescriptor_e7fdddb109e6467a, []int{8} } + func (m *BlockMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockMessage.Unmarshal(m, b) } func (m *BlockMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BlockMessage.Marshal(b, m, deterministic) } -func (dst *BlockMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlockMessage.Merge(dst, src) +func (m *BlockMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlockMessage.Merge(m, src) } func (m *BlockMessage) XXX_Size() int { return xxx_messageInfo_BlockMessage.Size(m) @@ -418,6 +429,84 @@ func (m *BlockMessage) GetLatestBlockHash() []byte { return nil } +type GetDataMessage struct { + DataHash [][]byte `protobuf:"bytes,1,rep,name=DataHash,proto3" json:"DataHash,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetDataMessage) Reset() { *m = GetDataMessage{} } +func (m *GetDataMessage) String() string { return proto.CompactTextString(m) } +func (*GetDataMessage) ProtoMessage() {} +func (*GetDataMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_e7fdddb109e6467a, []int{9} +} + +func (m *GetDataMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetDataMessage.Unmarshal(m, b) +} +func (m *GetDataMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetDataMessage.Marshal(b, m, deterministic) +} +func (m *GetDataMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetDataMessage.Merge(m, src) +} +func (m *GetDataMessage) XXX_Size() int { + return xxx_messageInfo_GetDataMessage.Size(m) +} +func (m *GetDataMessage) XXX_DiscardUnknown() { + xxx_messageInfo_GetDataMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_GetDataMessage proto.InternalMessageInfo + +func (m *GetDataMessage) GetDataHash() [][]byte { + if m != nil { + return m.DataHash + } + return nil +} + +type DataMessage struct { + Data [][]byte `protobuf:"bytes,2,rep,name=Data,proto3" json:"Data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DataMessage) Reset() { *m = DataMessage{} } +func (m *DataMessage) String() string { return proto.CompactTextString(m) } +func (*DataMessage) ProtoMessage() {} +func (*DataMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_e7fdddb109e6467a, []int{10} +} + +func (m *DataMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DataMessage.Unmarshal(m, b) +} +func (m *DataMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DataMessage.Marshal(b, m, deterministic) +} +func (m *DataMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_DataMessage.Merge(m, src) +} +func (m *DataMessage) XXX_Size() int { + return xxx_messageInfo_DataMessage.Size(m) +} +func (m *DataMessage) XXX_DiscardUnknown() { + xxx_messageInfo_DataMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_DataMessage proto.InternalMessageInfo + +func (m *DataMessage) GetData() [][]byte { + if m != nil { + return m.Data + } + return nil +} + type GetAddrMessage struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -428,16 +517,17 @@ func (m *GetAddrMessage) Reset() { *m = GetAddrMessage{} } func (m *GetAddrMessage) String() string { return proto.CompactTextString(m) } func (*GetAddrMessage) ProtoMessage() {} func (*GetAddrMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{9} + return fileDescriptor_e7fdddb109e6467a, []int{11} } + func (m *GetAddrMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAddrMessage.Unmarshal(m, b) } func (m *GetAddrMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetAddrMessage.Marshal(b, m, deterministic) } -func (dst *GetAddrMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetAddrMessage.Merge(dst, src) +func (m *GetAddrMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetAddrMessage.Merge(m, src) } func (m *GetAddrMessage) XXX_Size() int { return xxx_messageInfo_GetAddrMessage.Size(m) @@ -459,16 +549,17 @@ func (m *AddrMessage) Reset() { *m = AddrMessage{} } func (m *AddrMessage) String() string { return proto.CompactTextString(m) } func (*AddrMessage) ProtoMessage() {} func (*AddrMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_p2p_7ccd670b601d542e, []int{10} + return fileDescriptor_e7fdddb109e6467a, []int{12} } + func (m *AddrMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddrMessage.Unmarshal(m, b) } func (m *AddrMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AddrMessage.Marshal(b, m, deterministic) } -func (dst *AddrMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddrMessage.Merge(dst, src) +func (m *AddrMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddrMessage.Merge(m, src) } func (m *AddrMessage) XXX_Size() int { return xxx_messageInfo_AddrMessage.Size(m) @@ -496,36 +587,40 @@ func init() { proto.RegisterType((*GetBlockMessage)(nil), "pb.GetBlockMessage") proto.RegisterType((*MempoolMessage)(nil), "pb.MempoolMessage") proto.RegisterType((*BlockMessage)(nil), "pb.BlockMessage") + proto.RegisterType((*GetDataMessage)(nil), "pb.GetDataMessage") + proto.RegisterType((*DataMessage)(nil), "pb.DataMessage") proto.RegisterType((*GetAddrMessage)(nil), "pb.GetAddrMessage") proto.RegisterType((*AddrMessage)(nil), "pb.AddrMessage") } -func init() { proto.RegisterFile("p2p.proto", fileDescriptor_p2p_7ccd670b601d542e) } - -var fileDescriptor_p2p_7ccd670b601d542e = []byte{ - // 378 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x6b, 0xea, 0x40, - 0x14, 0xc5, 0x89, 0xff, 0xde, 0xf3, 0x26, 0xea, 0x33, 0x3c, 0x24, 0xb8, 0x28, 0x61, 0x74, 0x91, - 0x42, 0x71, 0x61, 0xf7, 0x82, 0xa5, 0x10, 0x05, 0x5b, 0x42, 0x84, 0xd2, 0x6d, 0x8c, 0xb7, 0x26, - 0xad, 0x66, 0x86, 0xcc, 0x7c, 0x98, 0x7e, 0xdc, 0x32, 0x93, 0x89, 0x24, 0x69, 0xa1, 0xbb, 0xf9, - 0x9d, 0x7b, 0x73, 0x72, 0xee, 0x9d, 0x81, 0x3e, 0x5b, 0xb2, 0x05, 0xcb, 0xa9, 0xa0, 0x76, 0x8b, - 0x1d, 0xc8, 0xa7, 0x01, 0xc3, 0x17, 0xcc, 0x79, 0x4a, 0xb3, 0x27, 0xe4, 0x3c, 0x3a, 0xa1, 0xed, - 0xc0, 0x1f, 0xad, 0x38, 0x86, 0x6b, 0x78, 0x9d, 0xb0, 0x44, 0x7b, 0x02, 0xbd, 0x00, 0x31, 0xdf, - 0x3e, 0x3a, 0x2d, 0xd7, 0xf0, 0xac, 0x50, 0x93, 0x3d, 0x85, 0xbf, 0xea, 0x94, 0xbd, 0x51, 0xa7, - 0xad, 0x2a, 0x57, 0xb6, 0x5d, 0x30, 0x7d, 0xcc, 0x90, 0xa7, 0x7c, 0x13, 0xf1, 0xc4, 0xe9, 0xa8, - 0x72, 0x55, 0x92, 0xae, 0x1b, 0x4c, 0x4f, 0x89, 0x70, 0xba, 0xea, 0x77, 0x9a, 0xc8, 0x0c, 0xcc, - 0x20, 0xcd, 0x4e, 0x65, 0xac, 0xff, 0xd0, 0x7d, 0xa6, 0x59, 0x8c, 0x3a, 0x54, 0x01, 0xaa, 0x89, - 0xfe, 0xd6, 0x74, 0x0b, 0x83, 0x10, 0xdf, 0x31, 0x16, 0x95, 0x11, 0xf5, 0x51, 0x35, 0xf6, 0xc3, - 0x12, 0x49, 0x02, 0x93, 0xb5, 0x10, 0xc8, 0x45, 0x24, 0xd4, 0x4a, 0x2e, 0x8c, 0xd2, 0xf3, 0x56, - 0xe0, 0xc5, 0xf6, 0x60, 0x54, 0xa9, 0xa8, 0x61, 0x0c, 0x35, 0x4c, 0x53, 0xb6, 0xe7, 0x30, 0x08, - 0xa2, 0x5c, 0xa4, 0x71, 0xca, 0x94, 0xa8, 0xb7, 0x55, 0x17, 0xc9, 0x1e, 0xc6, 0x3e, 0x0a, 0xfd, - 0x87, 0x32, 0xd8, 0x0a, 0xac, 0x8a, 0x1b, 0x77, 0x0c, 0xb7, 0xed, 0x99, 0xcb, 0xe9, 0x82, 0x1d, - 0x16, 0x3f, 0xc7, 0x0a, 0x6b, 0xfd, 0x64, 0x0f, 0x23, 0x1f, 0xc5, 0xc3, 0x99, 0xc6, 0x1f, 0xa5, - 0xe5, 0x1c, 0x06, 0x3b, 0x1a, 0x47, 0x82, 0xe6, 0x32, 0x1c, 0x16, 0x9e, 0x56, 0x58, 0x17, 0xe5, - 0x15, 0xca, 0xd3, 0x5e, 0x50, 0xa6, 0xe3, 0x5e, 0x99, 0xac, 0x60, 0xd8, 0x88, 0x79, 0x07, 0xe3, - 0xc6, 0xd0, 0x57, 0xdf, 0xef, 0x05, 0xf2, 0x0a, 0x56, 0x2d, 0xd1, 0x0d, 0x80, 0xe2, 0x20, 0x12, - 0x49, 0xf1, 0x59, 0x3f, 0xac, 0x28, 0x72, 0xd3, 0xbb, 0x48, 0x9a, 0x28, 0x4d, 0x6d, 0xba, 0x88, - 0xd4, 0x94, 0xc9, 0x3f, 0x18, 0xfa, 0x28, 0xd6, 0xc7, 0x63, 0x5e, 0xde, 0xdf, 0x0c, 0xcc, 0x0a, - 0xca, 0xf7, 0x20, 0xb1, 0x0c, 0x57, 0xc0, 0xa1, 0xa7, 0xde, 0xff, 0xfd, 0x57, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xce, 0xb4, 0x4b, 0x44, 0x0c, 0x03, 0x00, 0x00, +func init() { proto.RegisterFile("p2p.proto", fileDescriptor_e7fdddb109e6467a) } + +var fileDescriptor_e7fdddb109e6467a = []byte{ + // 410 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0x41, 0x6b, 0xdb, 0x40, + 0x10, 0x85, 0x91, 0xe3, 0xa4, 0xf1, 0xc8, 0x76, 0x9a, 0xa5, 0x84, 0xc5, 0x87, 0xe2, 0x6e, 0x72, + 0x70, 0x21, 0xf8, 0x90, 0xde, 0x03, 0x29, 0x01, 0x27, 0x90, 0x16, 0x23, 0x43, 0xe9, 0x75, 0xad, + 0x4c, 0x2d, 0xb5, 0x89, 0x76, 0xd1, 0xce, 0x8f, 0xe9, 0xcf, 0x2d, 0x3b, 0xda, 0x15, 0x92, 0x5a, + 0xe8, 0x6d, 0xbe, 0x37, 0xe3, 0xa7, 0x37, 0x23, 0x19, 0x26, 0xf6, 0xc6, 0xae, 0x6d, 0x6d, 0xc8, + 0x88, 0x91, 0xdd, 0xab, 0xdf, 0x09, 0xcc, 0xbf, 0x61, 0xed, 0x4a, 0x53, 0x7d, 0x41, 0xe7, 0xf4, + 0x01, 0x85, 0x84, 0x37, 0x41, 0x91, 0xc9, 0x32, 0x59, 0x8d, 0xb3, 0x88, 0xe2, 0x02, 0x4e, 0xb6, + 0x88, 0xf5, 0xe3, 0xbd, 0x1c, 0x2d, 0x93, 0xd5, 0x34, 0x0b, 0x24, 0x16, 0x70, 0xca, 0x55, 0xf5, + 0xc3, 0xc8, 0x23, 0xee, 0xb4, 0x2c, 0x96, 0x90, 0x6e, 0xb0, 0x42, 0x57, 0xba, 0x07, 0xed, 0x0a, + 0x39, 0xe6, 0x76, 0x57, 0xf2, 0xae, 0x0f, 0x58, 0x1e, 0x0a, 0x92, 0xc7, 0xfc, 0xb8, 0x40, 0xea, + 0x12, 0xd2, 0x6d, 0x59, 0x1d, 0x62, 0xac, 0x77, 0x70, 0xfc, 0xd5, 0x54, 0x39, 0x86, 0x50, 0x0d, + 0xf0, 0x90, 0xf9, 0xdf, 0xd0, 0x47, 0x98, 0x65, 0xf8, 0x13, 0x73, 0xea, 0xac, 0x18, 0x4a, 0x1e, + 0x9c, 0x64, 0x11, 0x55, 0x01, 0x17, 0x77, 0x44, 0xe8, 0x48, 0x13, 0x9f, 0xe4, 0xd5, 0x1a, 0xf3, + 0xf2, 0x48, 0xf8, 0x2a, 0x56, 0x70, 0xd6, 0xe9, 0xf0, 0x32, 0x09, 0x2f, 0x33, 0x94, 0xc5, 0x15, + 0xcc, 0xb6, 0xba, 0xa6, 0x32, 0x2f, 0x2d, 0x8b, 0xe1, 0x5a, 0x7d, 0x51, 0xed, 0xe0, 0x7c, 0x83, + 0x14, 0x9e, 0x10, 0x83, 0xdd, 0xc2, 0xb4, 0xe3, 0xe6, 0x64, 0xb2, 0x3c, 0x5a, 0xa5, 0x37, 0x8b, + 0xb5, 0xdd, 0xaf, 0xff, 0x1d, 0x2b, 0xeb, 0xcd, 0xab, 0x1d, 0x9c, 0x6d, 0x90, 0x3e, 0xbf, 0x98, + 0xfc, 0x57, 0xb4, 0xbc, 0x82, 0xd9, 0x93, 0xc9, 0x35, 0x99, 0xda, 0x87, 0xc3, 0xc6, 0x73, 0x9a, + 0xf5, 0x45, 0xff, 0x0a, 0x7d, 0xb5, 0x23, 0x63, 0x43, 0xdc, 0x96, 0xd5, 0x2d, 0xcc, 0x07, 0x31, + 0xaf, 0xe1, 0x7c, 0xb0, 0x74, 0xeb, 0xfb, 0x77, 0x43, 0x7d, 0x87, 0x69, 0x2f, 0xd1, 0x7b, 0x00, + 0xe6, 0xad, 0xa6, 0xa2, 0xf9, 0xd9, 0x24, 0xeb, 0x28, 0xfe, 0xd2, 0x4f, 0xda, 0x9b, 0xb0, 0xc6, + 0x97, 0x6e, 0x22, 0x0d, 0x65, 0x75, 0x0d, 0xf3, 0x0d, 0xd2, 0xbd, 0x26, 0x1d, 0xbd, 0x17, 0x70, + 0xea, 0x31, 0xbc, 0x1e, 0x1f, 0xa8, 0x65, 0xf5, 0x01, 0xd2, 0xee, 0xa8, 0x80, 0xb1, 0x47, 0x39, + 0xe2, 0x31, 0xae, 0xd5, 0x5b, 0x36, 0xbc, 0x7b, 0x7e, 0xae, 0xe3, 0x07, 0x71, 0x09, 0x69, 0x07, + 0xfd, 0x07, 0xe6, 0x31, 0x6e, 0xdb, 0xc0, 0xfe, 0x84, 0xff, 0x50, 0x9f, 0xfe, 0x04, 0x00, 0x00, + 0xff, 0xff, 0xb6, 0x31, 0xad, 0x8a, 0x5d, 0x03, 0x00, 0x00, } diff --git a/pb/shardrpc.pb.go b/pb/shardrpc.pb.go index c374a6f9..8502a2fe 100644 --- a/pb/shardrpc.pb.go +++ b/pb/shardrpc.pb.go @@ -3,14 +3,13 @@ package pb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import empty "github.com/golang/protobuf/ptypes/empty" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -36,16 +35,17 @@ func (m *GetStateKeyRequest) Reset() { *m = GetStateKeyRequest{} } func (m *GetStateKeyRequest) String() string { return proto.CompactTextString(m) } func (*GetStateKeyRequest) ProtoMessage() {} func (*GetStateKeyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{0} + return fileDescriptor_0aefcd34784e5c0e, []int{0} } + func (m *GetStateKeyRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetStateKeyRequest.Unmarshal(m, b) } func (m *GetStateKeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetStateKeyRequest.Marshal(b, m, deterministic) } -func (dst *GetStateKeyRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetStateKeyRequest.Merge(dst, src) +func (m *GetStateKeyRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetStateKeyRequest.Merge(m, src) } func (m *GetStateKeyRequest) XXX_Size() int { return xxx_messageInfo_GetStateKeyRequest.Size(m) @@ -81,16 +81,17 @@ func (m *GetStateKeyResponse) Reset() { *m = GetStateKeyResponse{} } func (m *GetStateKeyResponse) String() string { return proto.CompactTextString(m) } func (*GetStateKeyResponse) ProtoMessage() {} func (*GetStateKeyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{1} + return fileDescriptor_0aefcd34784e5c0e, []int{1} } + func (m *GetStateKeyResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetStateKeyResponse.Unmarshal(m, b) } func (m *GetStateKeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetStateKeyResponse.Marshal(b, m, deterministic) } -func (dst *GetStateKeyResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetStateKeyResponse.Merge(dst, src) +func (m *GetStateKeyResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetStateKeyResponse.Merge(m, src) } func (m *GetStateKeyResponse) XXX_Size() int { return xxx_messageInfo_GetStateKeyResponse.Size(m) @@ -119,16 +120,17 @@ func (m *BlockHashResponse) Reset() { *m = BlockHashResponse{} } func (m *BlockHashResponse) String() string { return proto.CompactTextString(m) } func (*BlockHashResponse) ProtoMessage() {} func (*BlockHashResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{2} + return fileDescriptor_0aefcd34784e5c0e, []int{2} } + func (m *BlockHashResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockHashResponse.Unmarshal(m, b) } func (m *BlockHashResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BlockHashResponse.Marshal(b, m, deterministic) } -func (dst *BlockHashResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlockHashResponse.Merge(dst, src) +func (m *BlockHashResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlockHashResponse.Merge(m, src) } func (m *BlockHashResponse) XXX_Size() int { return xxx_messageInfo_BlockHashResponse.Size(m) @@ -158,16 +160,17 @@ func (m *SlotRequest) Reset() { *m = SlotRequest{} } func (m *SlotRequest) String() string { return proto.CompactTextString(m) } func (*SlotRequest) ProtoMessage() {} func (*SlotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{3} + return fileDescriptor_0aefcd34784e5c0e, []int{3} } + func (m *SlotRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlotRequest.Unmarshal(m, b) } func (m *SlotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SlotRequest.Marshal(b, m, deterministic) } -func (dst *SlotRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SlotRequest.Merge(dst, src) +func (m *SlotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SlotRequest.Merge(m, src) } func (m *SlotRequest) XXX_Size() int { return xxx_messageInfo_SlotRequest.Size(m) @@ -205,16 +208,17 @@ func (m *BlockGenerationRequest) Reset() { *m = BlockGenerationRequest{} func (m *BlockGenerationRequest) String() string { return proto.CompactTextString(m) } func (*BlockGenerationRequest) ProtoMessage() {} func (*BlockGenerationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{4} + return fileDescriptor_0aefcd34784e5c0e, []int{4} } + func (m *BlockGenerationRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlockGenerationRequest.Unmarshal(m, b) } func (m *BlockGenerationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BlockGenerationRequest.Marshal(b, m, deterministic) } -func (dst *BlockGenerationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlockGenerationRequest.Merge(dst, src) +func (m *BlockGenerationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BlockGenerationRequest.Merge(m, src) } func (m *BlockGenerationRequest) XXX_Size() int { return xxx_messageInfo_BlockGenerationRequest.Size(m) @@ -258,16 +262,17 @@ func (m *ShardBlockSubmission) Reset() { *m = ShardBlockSubmission{} } func (m *ShardBlockSubmission) String() string { return proto.CompactTextString(m) } func (*ShardBlockSubmission) ProtoMessage() {} func (*ShardBlockSubmission) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{5} + return fileDescriptor_0aefcd34784e5c0e, []int{5} } + func (m *ShardBlockSubmission) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardBlockSubmission.Unmarshal(m, b) } func (m *ShardBlockSubmission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardBlockSubmission.Marshal(b, m, deterministic) } -func (dst *ShardBlockSubmission) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardBlockSubmission.Merge(dst, src) +func (m *ShardBlockSubmission) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardBlockSubmission.Merge(m, src) } func (m *ShardBlockSubmission) XXX_Size() int { return xxx_messageInfo_ShardBlockSubmission.Size(m) @@ -306,16 +311,17 @@ func (m *ShardSubscribeRequest) Reset() { *m = ShardSubscribeRequest{} } func (m *ShardSubscribeRequest) String() string { return proto.CompactTextString(m) } func (*ShardSubscribeRequest) ProtoMessage() {} func (*ShardSubscribeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{6} + return fileDescriptor_0aefcd34784e5c0e, []int{6} } + func (m *ShardSubscribeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardSubscribeRequest.Unmarshal(m, b) } func (m *ShardSubscribeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardSubscribeRequest.Marshal(b, m, deterministic) } -func (dst *ShardSubscribeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardSubscribeRequest.Merge(dst, src) +func (m *ShardSubscribeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardSubscribeRequest.Merge(m, src) } func (m *ShardSubscribeRequest) XXX_Size() int { return xxx_messageInfo_ShardSubscribeRequest.Size(m) @@ -365,16 +371,17 @@ func (m *ShardUnsubscribeRequest) Reset() { *m = ShardUnsubscribeRequest func (m *ShardUnsubscribeRequest) String() string { return proto.CompactTextString(m) } func (*ShardUnsubscribeRequest) ProtoMessage() {} func (*ShardUnsubscribeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{7} + return fileDescriptor_0aefcd34784e5c0e, []int{7} } + func (m *ShardUnsubscribeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardUnsubscribeRequest.Unmarshal(m, b) } func (m *ShardUnsubscribeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardUnsubscribeRequest.Marshal(b, m, deterministic) } -func (dst *ShardUnsubscribeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardUnsubscribeRequest.Merge(dst, src) +func (m *ShardUnsubscribeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardUnsubscribeRequest.Merge(m, src) } func (m *ShardUnsubscribeRequest) XXX_Size() int { return xxx_messageInfo_ShardUnsubscribeRequest.Size(m) @@ -404,16 +411,17 @@ func (m *ShardTransactionSubmission) Reset() { *m = ShardTransactionSubm func (m *ShardTransactionSubmission) String() string { return proto.CompactTextString(m) } func (*ShardTransactionSubmission) ProtoMessage() {} func (*ShardTransactionSubmission) Descriptor() ([]byte, []int) { - return fileDescriptor_shardrpc_76de8ea78acbb041, []int{8} + return fileDescriptor_0aefcd34784e5c0e, []int{8} } + func (m *ShardTransactionSubmission) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardTransactionSubmission.Unmarshal(m, b) } func (m *ShardTransactionSubmission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ShardTransactionSubmission.Marshal(b, m, deterministic) } -func (dst *ShardTransactionSubmission) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShardTransactionSubmission.Merge(dst, src) +func (m *ShardTransactionSubmission) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShardTransactionSubmission.Merge(m, src) } func (m *ShardTransactionSubmission) XXX_Size() int { return xxx_messageInfo_ShardTransactionSubmission.Size(m) @@ -450,6 +458,45 @@ func init() { proto.RegisterType((*ShardTransactionSubmission)(nil), "pb.ShardTransactionSubmission") } +func init() { proto.RegisterFile("shardrpc.proto", fileDescriptor_0aefcd34784e5c0e) } + +var fileDescriptor_0aefcd34784e5c0e = []byte{ + // 520 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xd3, 0x4c, + 0x10, 0x95, 0xf3, 0xf3, 0x7d, 0x30, 0x2e, 0xa5, 0xdd, 0x26, 0x69, 0x30, 0x08, 0x55, 0x56, 0x2f, + 0x2a, 0x21, 0xb9, 0x90, 0x4a, 0x70, 0x83, 0xf8, 0x69, 0x28, 0x05, 0xe5, 0x06, 0xd9, 0x29, 0xf7, + 0x6b, 0x77, 0x68, 0xad, 0xda, 0xbb, 0xc6, 0xbb, 0xbe, 0x08, 0xaf, 0xc1, 0x1b, 0xf0, 0xa4, 0xc8, + 0xb3, 0x89, 0x7f, 0x92, 0x56, 0x2a, 0x77, 0xbb, 0x33, 0x67, 0xcf, 0x9c, 0x39, 0x3b, 0xbb, 0xb0, + 0xad, 0xae, 0x79, 0x7e, 0x99, 0x67, 0x91, 0x97, 0xe5, 0x52, 0x4b, 0xd6, 0xc9, 0x42, 0xe7, 0xe9, + 0x95, 0x94, 0x57, 0x09, 0x1e, 0x53, 0x24, 0x2c, 0x7e, 0x1c, 0x63, 0x9a, 0xe9, 0x85, 0x01, 0x38, + 0x5b, 0x91, 0x4c, 0x53, 0x29, 0xcc, 0xce, 0xfd, 0x00, 0xec, 0x1c, 0x75, 0xa0, 0xb9, 0xc6, 0x19, + 0x2e, 0x7c, 0xfc, 0x59, 0xa0, 0xd2, 0x6c, 0x07, 0xba, 0x33, 0x5c, 0x8c, 0xad, 0x03, 0xeb, 0x68, + 0xcb, 0x2f, 0x97, 0x6c, 0x0c, 0xff, 0x07, 0x65, 0xa1, 0xaf, 0x9f, 0xc6, 0x9d, 0x03, 0xeb, 0xa8, + 0xe7, 0xaf, 0xb6, 0xee, 0x0b, 0xd8, 0x6b, 0x31, 0xa8, 0x4c, 0x0a, 0x85, 0x6c, 0x00, 0xfd, 0xef, + 0x3c, 0x29, 0x70, 0x49, 0x62, 0x36, 0xee, 0x2b, 0xd8, 0x3d, 0x4d, 0x64, 0x74, 0xf3, 0x85, 0xab, + 0xeb, 0x0a, 0xfa, 0x0c, 0x1e, 0x56, 0xc1, 0x25, 0xbc, 0x0e, 0xb8, 0x6f, 0xc0, 0x0e, 0x12, 0xa9, + 0x57, 0xd2, 0x06, 0xd0, 0xa7, 0xca, 0x04, 0xec, 0xf9, 0x66, 0xc3, 0x18, 0xf4, 0x4a, 0xd0, 0x52, + 0x1b, 0xad, 0x5d, 0x0d, 0x23, 0x62, 0x39, 0x47, 0x81, 0x39, 0xd7, 0xb1, 0x14, 0xff, 0xcc, 0xc1, + 0x5e, 0xc2, 0xde, 0xe7, 0x58, 0xf0, 0x24, 0xfe, 0x85, 0x97, 0xa7, 0xc8, 0x23, 0x29, 0x48, 0x64, + 0x97, 0x44, 0xde, 0x96, 0x72, 0x7d, 0x18, 0x10, 0x1d, 0x95, 0x0e, 0x8a, 0x30, 0x8d, 0x95, 0x8a, + 0xa5, 0x60, 0x87, 0xd0, 0xa7, 0x10, 0xd5, 0xb4, 0x27, 0xdb, 0x5e, 0x16, 0x7a, 0x35, 0xd0, 0x37, + 0xc9, 0x5a, 0x59, 0xa7, 0xa1, 0xcc, 0xfd, 0x6d, 0xc1, 0x90, 0x56, 0x41, 0x11, 0xaa, 0x28, 0x8f, + 0x43, 0x5c, 0x75, 0xd2, 0xb8, 0x16, 0xab, 0x75, 0x2d, 0xec, 0x10, 0x1e, 0x4d, 0x73, 0xa9, 0x54, + 0x12, 0x8b, 0x9b, 0x46, 0x5b, 0xed, 0x60, 0xdb, 0xfa, 0xee, 0x9a, 0xf5, 0x65, 0xf6, 0x42, 0xe8, + 0x38, 0xa1, 0xf3, 0x3d, 0x3a, 0x5f, 0x07, 0xdc, 0x13, 0xd8, 0xa7, 0x62, 0x17, 0x42, 0xdd, 0x5b, + 0x96, 0x2b, 0xc0, 0xa1, 0xe5, 0x3c, 0xe7, 0x42, 0xf1, 0xa8, 0xbc, 0x95, 0x86, 0x49, 0x77, 0xb7, + 0xf3, 0x1a, 0xec, 0xc6, 0x11, 0x6a, 0xc6, 0x9e, 0x0c, 0x2a, 0x13, 0x1b, 0x39, 0xbf, 0x09, 0x9c, + 0xfc, 0xe9, 0xc2, 0x03, 0x42, 0xf8, 0xdf, 0xa6, 0xec, 0x0c, 0x76, 0x2a, 0x07, 0xe7, 0xd2, 0xdc, + 0xfa, 0x93, 0x8a, 0x63, 0xdd, 0x5c, 0x67, 0xe4, 0x99, 0x77, 0xe4, 0xad, 0xde, 0x91, 0x77, 0x56, + 0xbe, 0x23, 0xf6, 0x96, 0xde, 0x4c, 0x65, 0xd3, 0x47, 0x4d, 0x56, 0x3e, 0x26, 0xa2, 0x7a, 0x52, + 0x9d, 0x61, 0x19, 0xd8, 0x9c, 0xf6, 0x29, 0x0c, 0x97, 0x13, 0x89, 0x94, 0x9c, 0x63, 0x9a, 0x25, + 0x5c, 0x23, 0x73, 0x2a, 0xfc, 0xc6, 0xc4, 0x3a, 0x6b, 0xe3, 0xc2, 0xde, 0x83, 0x4d, 0xb6, 0x19, + 0x15, 0x6c, 0xdc, 0x4e, 0xd7, 0x8e, 0xde, 0xd9, 0xc3, 0x0c, 0x76, 0x0d, 0x41, 0xc3, 0x2c, 0xf6, + 0xfc, 0x36, 0x3f, 0xef, 0x41, 0xf6, 0x0e, 0xec, 0xc6, 0x17, 0xc0, 0x46, 0x25, 0xcd, 0xe6, 0xaf, + 0xe2, 0xec, 0x6f, 0xc4, 0x8d, 0x25, 0xe1, 0x7f, 0xc4, 0x77, 0xf2, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x47, 0x57, 0xac, 0x7d, 0xcc, 0x04, 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -686,42 +733,3 @@ var _ShardRPC_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "shardrpc.proto", } - -func init() { proto.RegisterFile("shardrpc.proto", fileDescriptor_shardrpc_76de8ea78acbb041) } - -var fileDescriptor_shardrpc_76de8ea78acbb041 = []byte{ - // 520 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xd3, 0x4c, - 0x10, 0x95, 0xf3, 0xf3, 0x7d, 0x30, 0x2e, 0xa5, 0xdd, 0x26, 0x69, 0x30, 0x08, 0x55, 0x56, 0x2f, - 0x2a, 0x21, 0xb9, 0x90, 0x4a, 0x70, 0x83, 0xf8, 0x69, 0x28, 0x05, 0xe5, 0x06, 0xd9, 0x29, 0xf7, - 0x6b, 0x77, 0x68, 0xad, 0xda, 0xbb, 0xc6, 0xbb, 0xbe, 0x08, 0xaf, 0xc1, 0x1b, 0xf0, 0xa4, 0xc8, - 0xb3, 0x89, 0x7f, 0x92, 0x56, 0x2a, 0x77, 0xbb, 0x33, 0x67, 0xcf, 0x9c, 0x39, 0x3b, 0xbb, 0xb0, - 0xad, 0xae, 0x79, 0x7e, 0x99, 0x67, 0x91, 0x97, 0xe5, 0x52, 0x4b, 0xd6, 0xc9, 0x42, 0xe7, 0xe9, - 0x95, 0x94, 0x57, 0x09, 0x1e, 0x53, 0x24, 0x2c, 0x7e, 0x1c, 0x63, 0x9a, 0xe9, 0x85, 0x01, 0x38, - 0x5b, 0x91, 0x4c, 0x53, 0x29, 0xcc, 0xce, 0xfd, 0x00, 0xec, 0x1c, 0x75, 0xa0, 0xb9, 0xc6, 0x19, - 0x2e, 0x7c, 0xfc, 0x59, 0xa0, 0xd2, 0x6c, 0x07, 0xba, 0x33, 0x5c, 0x8c, 0xad, 0x03, 0xeb, 0x68, - 0xcb, 0x2f, 0x97, 0x6c, 0x0c, 0xff, 0x07, 0x65, 0xa1, 0xaf, 0x9f, 0xc6, 0x9d, 0x03, 0xeb, 0xa8, - 0xe7, 0xaf, 0xb6, 0xee, 0x0b, 0xd8, 0x6b, 0x31, 0xa8, 0x4c, 0x0a, 0x85, 0x6c, 0x00, 0xfd, 0xef, - 0x3c, 0x29, 0x70, 0x49, 0x62, 0x36, 0xee, 0x2b, 0xd8, 0x3d, 0x4d, 0x64, 0x74, 0xf3, 0x85, 0xab, - 0xeb, 0x0a, 0xfa, 0x0c, 0x1e, 0x56, 0xc1, 0x25, 0xbc, 0x0e, 0xb8, 0x6f, 0xc0, 0x0e, 0x12, 0xa9, - 0x57, 0xd2, 0x06, 0xd0, 0xa7, 0xca, 0x04, 0xec, 0xf9, 0x66, 0xc3, 0x18, 0xf4, 0x4a, 0xd0, 0x52, - 0x1b, 0xad, 0x5d, 0x0d, 0x23, 0x62, 0x39, 0x47, 0x81, 0x39, 0xd7, 0xb1, 0x14, 0xff, 0xcc, 0xc1, - 0x5e, 0xc2, 0xde, 0xe7, 0x58, 0xf0, 0x24, 0xfe, 0x85, 0x97, 0xa7, 0xc8, 0x23, 0x29, 0x48, 0x64, - 0x97, 0x44, 0xde, 0x96, 0x72, 0x7d, 0x18, 0x10, 0x1d, 0x95, 0x0e, 0x8a, 0x30, 0x8d, 0x95, 0x8a, - 0xa5, 0x60, 0x87, 0xd0, 0xa7, 0x10, 0xd5, 0xb4, 0x27, 0xdb, 0x5e, 0x16, 0x7a, 0x35, 0xd0, 0x37, - 0xc9, 0x5a, 0x59, 0xa7, 0xa1, 0xcc, 0xfd, 0x6d, 0xc1, 0x90, 0x56, 0x41, 0x11, 0xaa, 0x28, 0x8f, - 0x43, 0x5c, 0x75, 0xd2, 0xb8, 0x16, 0xab, 0x75, 0x2d, 0xec, 0x10, 0x1e, 0x4d, 0x73, 0xa9, 0x54, - 0x12, 0x8b, 0x9b, 0x46, 0x5b, 0xed, 0x60, 0xdb, 0xfa, 0xee, 0x9a, 0xf5, 0x65, 0xf6, 0x42, 0xe8, - 0x38, 0xa1, 0xf3, 0x3d, 0x3a, 0x5f, 0x07, 0xdc, 0x13, 0xd8, 0xa7, 0x62, 0x17, 0x42, 0xdd, 0x5b, - 0x96, 0x2b, 0xc0, 0xa1, 0xe5, 0x3c, 0xe7, 0x42, 0xf1, 0xa8, 0xbc, 0x95, 0x86, 0x49, 0x77, 0xb7, - 0xf3, 0x1a, 0xec, 0xc6, 0x11, 0x6a, 0xc6, 0x9e, 0x0c, 0x2a, 0x13, 0x1b, 0x39, 0xbf, 0x09, 0x9c, - 0xfc, 0xe9, 0xc2, 0x03, 0x42, 0xf8, 0xdf, 0xa6, 0xec, 0x0c, 0x76, 0x2a, 0x07, 0xe7, 0xd2, 0xdc, - 0xfa, 0x93, 0x8a, 0x63, 0xdd, 0x5c, 0x67, 0xe4, 0x99, 0x77, 0xe4, 0xad, 0xde, 0x91, 0x77, 0x56, - 0xbe, 0x23, 0xf6, 0x96, 0xde, 0x4c, 0x65, 0xd3, 0x47, 0x4d, 0x56, 0x3e, 0x26, 0xa2, 0x7a, 0x52, - 0x9d, 0x61, 0x19, 0xd8, 0x9c, 0xf6, 0x29, 0x0c, 0x97, 0x13, 0x89, 0x94, 0x9c, 0x63, 0x9a, 0x25, - 0x5c, 0x23, 0x73, 0x2a, 0xfc, 0xc6, 0xc4, 0x3a, 0x6b, 0xe3, 0xc2, 0xde, 0x83, 0x4d, 0xb6, 0x19, - 0x15, 0x6c, 0xdc, 0x4e, 0xd7, 0x8e, 0xde, 0xd9, 0xc3, 0x0c, 0x76, 0x0d, 0x41, 0xc3, 0x2c, 0xf6, - 0xfc, 0x36, 0x3f, 0xef, 0x41, 0xf6, 0x0e, 0xec, 0xc6, 0x17, 0xc0, 0x46, 0x25, 0xcd, 0xe6, 0xaf, - 0xe2, 0xec, 0x6f, 0xc4, 0x8d, 0x25, 0xe1, 0x7f, 0xc4, 0x77, 0xf2, 0x37, 0x00, 0x00, 0xff, 0xff, - 0x47, 0x57, 0xac, 0x7d, 0xcc, 0x04, 0x00, 0x00, -} diff --git a/validator/module/app.go b/validator/module/app.go index d505b5b6..d7e6e4e8 100644 --- a/validator/module/app.go +++ b/validator/module/app.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + beaconconfig "github.com/phoreproject/synapse/beacon/config" "github.com/phoreproject/synapse/utils" "github.com/phoreproject/synapse/validator/config" @@ -14,6 +15,7 @@ import ( "github.com/phoreproject/synapse/pb" logger "github.com/sirupsen/logrus" + "github.com/golang/protobuf/ptypes/empty" "github.com/phoreproject/synapse/validator" ) @@ -75,6 +77,15 @@ func (v *ValidatorApp) Run() error { keystore := validator.NewRootKeyStore(v.config.RootKey) + hashConfigResponse, err := blockchainRPC.GetConfigHash(v.ctx, &empty.Empty{}) + if err != nil { + return err + } + validatorConfigHash := beaconconfig.HashConfig(v.config.NetworkConfig) + if bytes.Compare(validatorConfigHash, hashConfigResponse.Hash) != 0 { + return fmt.Errorf("Validator config doesn't match beacon config") + } + logger.Info("Checking validator public keys...") for _, val := range v.config.ValidatorIndices { From 2abd9767494dfab49669bf68e735955b41120839 Mon Sep 17 00:00:00 2001 From: wqking Date: Thu, 21 Nov 2019 13:11:03 +0800 Subject: [PATCH 14/20] Fixed index out of range error in NewSlot that caused by epoch age check. --- validator/validatormanager.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/validator/validatormanager.go b/validator/validatormanager.go index 8c10e218..7661e006 100644 --- a/validator/validatormanager.go +++ b/validator/validatormanager.go @@ -181,15 +181,18 @@ func NewManager(ctx context.Context, blockchainRPC pb.BlockchainRPCClient, shard func (vm *Manager) UpdateEpochInformation(slotNumber uint64) error { epochInformation, err := vm.blockchainRPC.GetEpochInformation(context.Background(), &pb.EpochInformationRequest{EpochIndex: slotNumber / vm.config.EpochLength}) if err != nil { + logrus.WithField("function", "UpdateEpochInformation").Errorf("GetEpochInformation error: %v", err) return err } if !epochInformation.HasEpochInformation { + logrus.WithField("function", "UpdateEpochInformation").Errorf("epochInformation.HasEpochInformation is false") return nil } ei, err := epochInformationFromProto(epochInformation.Information) if err != nil { + logrus.WithField("function", "UpdateEpochInformation").Errorf("epochInformationFromProto error: %v", err) return err } @@ -247,11 +250,14 @@ func (vm *Manager) UpdateEpochInformation(slotNumber uint64) error { BlockHash: ei.latestCrosslinks[shardID].ShardBlockHash[:], }) if err != nil { + logrus.WithField("function", "UpdateEpochInformation").Errorf("SubscribeToShard error: %v", err) return err } } } + logrus.WithField("function", "UpdateEpochInformation").Info("vm.latestEpochInformation is updated") + vm.latestEpochInformation = *ei vm.synced = true vm.epochIndex = int64(slotNumber / vm.config.EpochLength) @@ -264,6 +270,13 @@ func (vm *Manager) NewSlot(slotNumber uint64) error { earliestSlot := vm.latestEpochInformation.earliestSlot logrus.WithField("slot", slotNumber).Debug("heard new slot") + if len(vm.latestEpochInformation.slots) == 0 { + return nil + } + + if int(int64(slotNumber-1)-earliestSlot) >= len(vm.latestEpochInformation.slots) { + logrus.WithField("function", "NewSlot").WithField("slotNumber", slotNumber).WithField("earliestSlot", earliestSlot).WithField("len(vm.latestEpochInformation.slots)", len(vm.latestEpochInformation.slots)).Error("slotNumber is out of range for vm.latestEpochInformation.slots") + } proposerSlotCommittees := vm.latestEpochInformation.slots[int64(slotNumber-1)-earliestSlot] proposer := proposerSlotCommittees[0].Committee[(slotNumber-1)%uint64(len(proposerSlotCommittees[0].Committee))] From 57de6cf49664d9ce29b88dbf773791d3c85c6e1c Mon Sep 17 00:00:00 2001 From: wqking Date: Wed, 4 Dec 2019 12:57:50 +0800 Subject: [PATCH 15/20] Integrated style design to explorer front end. --- .../website/backend/src/templatehelpers.js | 1 + explorer/website/frontend/js/app.js | 31 + explorer/website/frontend/package-lock.json | 15 + explorer/website/frontend/package.json | 3 + explorer/website/frontend/sass/_settings.scss | 869 ++++++++++++++++++ explorer/website/frontend/sass/app.scss | 1 + explorer/website/frontend/sass/main.scss | 20 + .../frontend/views/layouts/default.hbs | 74 +- .../website/frontend/views/pages/home.hbs | 8 +- .../frontend/views/partials/blocktable.hbs | 17 +- .../frontend/views/partials/maintabs.hbs | 41 + .../frontend/views/partials/shardtable.hbs | 17 +- .../views/partials/validatortable.hbs | 16 +- 13 files changed, 1062 insertions(+), 51 deletions(-) create mode 100644 explorer/website/frontend/sass/_settings.scss create mode 100644 explorer/website/frontend/sass/main.scss create mode 100644 explorer/website/frontend/views/partials/maintabs.hbs diff --git a/explorer/website/backend/src/templatehelpers.js b/explorer/website/backend/src/templatehelpers.js index bbae6b9b..487494f2 100644 --- a/explorer/website/backend/src/templatehelpers.js +++ b/explorer/website/backend/src/templatehelpers.js @@ -14,6 +14,7 @@ function registerPartials(application) doRegisterPartial(application.getFrontEndViewsPath('/partials/test.hbs')); doRegisterPartial(application.getFrontEndViewsPath('/partials/blocktable.hbs')); doRegisterPartial(application.getFrontEndViewsPath('/partials/blockdetail.hbs')); + doRegisterPartial(application.getFrontEndViewsPath('/partials/maintabs.hbs')); } function registerHelpers(application) diff --git a/explorer/website/frontend/js/app.js b/explorer/website/frontend/js/app.js index fd16dc34..70392697 100644 --- a/explorer/website/frontend/js/app.js +++ b/explorer/website/frontend/js/app.js @@ -12,3 +12,34 @@ window.util = require('./util'); window.sprintf = require('sprintf-js').sprintf; window.vsprintf = require('sprintf-js').vsprintf; + +$(function() { + $(document).foundation(); +}); + +var defaultTableOptions = { + searching: false, + lengthChange: false, + responsive: true, + fixedHeader: { + header: true, + }, + lengthMenu: [ [ 25, 50, 100 ], [ 25, 50, 100 ] ], + pageLength: 25, + info: false, + headerCallback: function( thead, data, start, end, display ) { + $(thead).closest('thead').find('th').each(function(){ + //$(this).css('color', 'red').css('border','none'); + $(this).css('border','none'); + }); + }, + initComplete: function(settings) { + var table = settings.oInstance.api(); + $(table.table().node()).removeClass('no-footer'); + }, +}; + +window.createTableOptions = function(options) { + return Object.assign({}, options, defaultTableOptions) +}; + diff --git a/explorer/website/frontend/package-lock.json b/explorer/website/frontend/package-lock.json index e745bc3c..693cc62c 100644 --- a/explorer/website/frontend/package-lock.json +++ b/explorer/website/frontend/package-lock.json @@ -3757,6 +3757,11 @@ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, + "foundation-sites": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/foundation-sites/-/foundation-sites-6.5.3.tgz", + "integrity": "sha512-ZwI0idjHHjezh6jRjpPxkczvmtUuJ1uGatZHpyloX0MvsFHfM0BFoxrqdXryXugGPdmb+yJi3JYMnz6+5t3K1A==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -5814,6 +5819,11 @@ } } }, + "motion-ui": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/motion-ui/-/motion-ui-2.0.3.tgz", + "integrity": "sha512-f9xzh/hbZTUYjk4M7y1aDcsiPTfqUbuvCv/+If05TSIBEJMu3hGBU+YSe9csQPP7WBBHXxjossEygM/TJo2enw==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -9408,6 +9418,11 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, + "what-input": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/what-input/-/what-input-5.2.6.tgz", + "integrity": "sha512-a0BcI5YR7xp87vSzGcbN0IszJKpUQuTmrZaTSQBl7TLDIdKj6rDhluQ7b/7lYGG81gWDvkySsEvwv4BW5an9kg==" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/explorer/website/frontend/package.json b/explorer/website/frontend/package.json index 093d71f7..06a1d753 100644 --- a/explorer/website/frontend/package.json +++ b/explorer/website/frontend/package.json @@ -27,6 +27,9 @@ "datatables.net": "^1.10.19", "datatables.net-dt": "^1.10.19", "datatables.net-zf": "^1.10.20", + "foundation-sites": "^6.5.3", + "motion-ui": "^2.0.3", + "what-input": "^5.1.2", "sprintf-js": "^1.1.2" } } diff --git a/explorer/website/frontend/sass/_settings.scss b/explorer/website/frontend/sass/_settings.scss new file mode 100644 index 00000000..653e5ac7 --- /dev/null +++ b/explorer/website/frontend/sass/_settings.scss @@ -0,0 +1,869 @@ +// Foundation for Sites Settings +// ----------------------------- +// +// Table of Contents: +// +// 1. Global +// 2. Breakpoints +// 3. The Grid +// 4. Base Typography +// 5. Typography Helpers +// 6. Abide +// 7. Accordion +// 8. Accordion Menu +// 9. Badge +// 10. Breadcrumbs +// 11. Button +// 12. Button Group +// 13. Callout +// 14. Card +// 15. Close Button +// 16. Drilldown +// 17. Dropdown +// 18. Dropdown Menu +// 19. Flexbox Utilities +// 20. Forms +// 21. Label +// 22. Media Object +// 23. Menu +// 24. Meter +// 25. Off-canvas +// 26. Orbit +// 27. Pagination +// 28. Progress Bar +// 29. Prototype Arrow +// 30. Prototype Border-Box +// 31. Prototype Border-None +// 32. Prototype Bordered +// 33. Prototype Display +// 34. Prototype Font-Styling +// 35. Prototype List-Style-Type +// 36. Prototype Overflow +// 37. Prototype Position +// 38. Prototype Rounded +// 39. Prototype Separator +// 40. Prototype Shadow +// 41. Prototype Sizing +// 42. Prototype Spacing +// 43. Prototype Text-Decoration +// 44. Prototype Text-Transformation +// 45. Prototype Text-Utilities +// 46. Responsive Embed +// 47. Reveal +// 48. Slider +// 49. Switch +// 50. Table +// 51. Tabs +// 52. Thumbnail +// 53. Title Bar +// 54. Tooltip +// 55. Top Bar +// 56. Xy Grid + +@import '~foundation-sites/scss/util/util'; + +// 1. Global +// --------- + +$global-font-size: 100%; +$global-width: rem-calc(1200); +$global-lineheight: 1.5; +$foundation-palette: ( + primary: #1779ba, + secondary: #767676, + success: #3adb76, + warning: #ffae00, + alert: #cc4b37, +); +$light-gray: #e6e6e6; +$medium-gray: #cacaca; +$dark-gray: #8a8a8a; +$black: #0a0a0a; +$white: #fefefe; +$body-background: $white; +$body-font-color: $black; +$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; +$body-antialiased: true; +$global-margin: 1rem; +$global-padding: 1rem; +$global-position: 1rem; +$global-weight-normal: normal; +$global-weight-bold: bold; +$global-radius: 0; +$global-menu-padding: 0.7rem 1rem; +$global-menu-nested-margin: 1rem; +$global-text-direction: ltr; +$global-flexbox: true; +$global-prototype-breakpoints: false; +$global-button-cursor: auto; +$global-color-pick-contrast-tolerance: 0; +$print-transparent-backgrounds: true; + +@include add-foundation-colors; +$print-hrefs: true; + +// 2. Breakpoints +// -------------- + +$breakpoints: ( + small: 0, + medium: 640px, + large: 1024px, + xlarge: 1200px, + xxlarge: 1440px, +); +$print-breakpoint: large; +$breakpoint-classes: (small medium large); + +// 3. The Grid +// ----------- + +$grid-row-width: $global-width; +$grid-column-count: 12; +$grid-column-gutter: ( + small: 20px, + medium: 30px, +); +$grid-column-align-edge: true; +$grid-column-alias: 'columns'; +$block-grid-max: 8; + +// 4. Base Typography +// ------------------ + +$header-font-family: $body-font-family; +$header-font-weight: $global-weight-normal; +$header-font-style: normal; +$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace; +$header-color: inherit; +$header-lineheight: 1.4; +$header-margin-bottom: 0.5rem; +$header-styles: ( + small: ( + 'h1': ('font-size': 24), + 'h2': ('font-size': 20), + 'h3': ('font-size': 19), + 'h4': ('font-size': 18), + 'h5': ('font-size': 17), + 'h6': ('font-size': 16), + ), + medium: ( + 'h1': ('font-size': 48), + 'h2': ('font-size': 40), + 'h3': ('font-size': 31), + 'h4': ('font-size': 25), + 'h5': ('font-size': 20), + 'h6': ('font-size': 16), + ), +); +$header-text-rendering: optimizeLegibility; +$small-font-size: 80%; +$header-small-font-color: $medium-gray; +$paragraph-lineheight: 1.6; +$paragraph-margin-bottom: 1rem; +$paragraph-text-rendering: optimizeLegibility; +$code-color: $black; +$code-font-family: $font-family-monospace; +$code-font-weight: $global-weight-normal; +$code-background: $light-gray; +$code-border: 1px solid $medium-gray; +$code-padding: rem-calc(2 5 1); +$anchor-color: $primary-color; +$anchor-color-hover: scale-color($anchor-color, $lightness: -14%); +$anchor-text-decoration: none; +$anchor-text-decoration-hover: none; +$hr-width: $global-width; +$hr-border: 1px solid $medium-gray; +$hr-margin: rem-calc(20) auto; +$list-lineheight: $paragraph-lineheight; +$list-margin-bottom: $paragraph-margin-bottom; +$list-style-type: disc; +$list-style-position: outside; +$list-side-margin: 1.25rem; +$list-nested-side-margin: 1.25rem; +$defnlist-margin-bottom: 1rem; +$defnlist-term-weight: $global-weight-bold; +$defnlist-term-margin-bottom: 0.3rem; +$blockquote-color: $dark-gray; +$blockquote-padding: rem-calc(9 20 0 19); +$blockquote-border: 1px solid $medium-gray; +$cite-font-size: rem-calc(13); +$cite-color: $dark-gray; +$cite-pseudo-content: '\2014 \0020'; +$keystroke-font: $font-family-monospace; +$keystroke-color: $black; +$keystroke-background: $light-gray; +$keystroke-padding: rem-calc(2 4 0); +$keystroke-radius: $global-radius; +$abbr-underline: 1px dotted $black; + +// 5. Typography Helpers +// --------------------- + +$lead-font-size: $global-font-size * 1.25; +$lead-lineheight: 1.6; +$subheader-lineheight: 1.4; +$subheader-color: $dark-gray; +$subheader-font-weight: $global-weight-normal; +$subheader-margin-top: 0.2rem; +$subheader-margin-bottom: 0.5rem; +$stat-font-size: 2.5rem; + +// 6. Abide +// -------- + +$abide-inputs: true; +$abide-labels: true; +$input-background-invalid: get-color(alert); +$form-label-color-invalid: get-color(alert); +$input-error-color: get-color(alert); +$input-error-font-size: rem-calc(12); +$input-error-font-weight: $global-weight-bold; + +// 7. Accordion +// ------------ + +$accordion-background: $white; +$accordion-plusminus: true; +$accordion-title-font-size: rem-calc(12); +$accordion-item-color: $primary-color; +$accordion-item-background-hover: $light-gray; +$accordion-item-padding: 1.25rem 1rem; +$accordion-content-background: $white; +$accordion-content-border: 1px solid $light-gray; +$accordion-content-color: $body-font-color; +$accordion-content-padding: 1rem; + +// 8. Accordion Menu +// ----------------- + +$accordionmenu-padding: $global-menu-padding; +$accordionmenu-nested-margin: $global-menu-nested-margin; +$accordionmenu-submenu-padding: $accordionmenu-padding; +$accordionmenu-arrows: true; +$accordionmenu-arrow-color: $primary-color; +$accordionmenu-item-background: null; +$accordionmenu-border: null; +$accordionmenu-submenu-toggle-background: null; +$accordion-submenu-toggle-border: $accordionmenu-border; +$accordionmenu-submenu-toggle-width: 40px; +$accordionmenu-submenu-toggle-height: $accordionmenu-submenu-toggle-width; +$accordionmenu-arrow-size: 6px; + +// 9. Badge +// -------- + +$badge-background: $primary-color; +$badge-color: $white; +$badge-color-alt: $black; +$badge-palette: $foundation-palette; +$badge-padding: 0.3em; +$badge-minwidth: 2.1em; +$badge-font-size: 0.6rem; + +// 10. Breadcrumbs +// --------------- + +$breadcrumbs-margin: 0 0 $global-margin 0; +$breadcrumbs-item-font-size: rem-calc(11); +$breadcrumbs-item-color: $primary-color; +$breadcrumbs-item-color-current: $black; +$breadcrumbs-item-color-disabled: $medium-gray; +$breadcrumbs-item-margin: 0.75rem; +$breadcrumbs-item-uppercase: true; +$breadcrumbs-item-separator: true; +$breadcrumbs-item-separator-item: '/'; +$breadcrumbs-item-separator-item-rtl: '\\'; +$breadcrumbs-item-separator-color: $medium-gray; + +// 11. Button +// ---------- + +$button-font-family: inherit; +$button-padding: 0.85em 1em; +$button-margin: 0 0 $global-margin 0; +$button-fill: solid; +$button-background: $primary-color; +$button-background-hover: scale-color($button-background, $lightness: -15%); +$button-color: $white; +$button-color-alt: $black; +$button-radius: $global-radius; +$button-hollow-border-width: 1px; +$button-sizes: ( + tiny: 0.6rem, + small: 0.75rem, + default: 0.9rem, + large: 1.25rem, +); +$button-palette: $foundation-palette; +$button-opacity-disabled: 0.25; +$button-background-hover-lightness: -20%; +$button-hollow-hover-lightness: -50%; +$button-transition: background-color 0.25s ease-out, color 0.25s ease-out; +$button-responsive-expanded: false; + +// 12. Button Group +// ---------------- + +$buttongroup-margin: 1rem; +$buttongroup-spacing: 1px; +$buttongroup-child-selector: '.button'; +$buttongroup-expand-max: 6; +$buttongroup-radius-on-each: true; + +// 13. Callout +// ----------- + +$callout-background: $white; +$callout-background-fade: 85%; +$callout-border: 1px solid rgba($black, 0.25); +$callout-margin: 0 0 1rem 0; +$callout-padding: 1rem; +$callout-font-color: $body-font-color; +$callout-font-color-alt: $body-background; +$callout-radius: $global-radius; +$callout-link-tint: 30%; + +// 14. Card +// -------- + +$card-background: $white; +$card-font-color: $body-font-color; +$card-divider-background: $light-gray; +$card-border: 1px solid $light-gray; +$card-shadow: none; +$card-border-radius: $global-radius; +$card-padding: $global-padding; +$card-margin-bottom: $global-margin; + +// 15. Close Button +// ---------------- + +$closebutton-position: right top; +$closebutton-offset-horizontal: ( + small: 0.66rem, + medium: 1rem, +); +$closebutton-offset-vertical: ( + small: 0.33em, + medium: 0.5rem, +); +$closebutton-size: ( + small: 1.5em, + medium: 2em, +); +$closebutton-lineheight: 1; +$closebutton-color: $dark-gray; +$closebutton-color-hover: $black; + +// 16. Drilldown +// ------------- + +$drilldown-transition: transform 0.15s linear; +$drilldown-arrows: true; +$drilldown-padding: $global-menu-padding; +$drilldown-nested-margin: 0; +$drilldown-background: $white; +$drilldown-submenu-padding: $drilldown-padding; +$drilldown-submenu-background: $white; +$drilldown-arrow-color: $primary-color; +$drilldown-arrow-size: 6px; + +// 17. Dropdown +// ------------ + +$dropdown-padding: 1rem; +$dropdown-background: $body-background; +$dropdown-border: 1px solid $medium-gray; +$dropdown-font-size: 1rem; +$dropdown-width: 300px; +$dropdown-radius: $global-radius; +$dropdown-sizes: ( + tiny: 100px, + small: 200px, + large: 400px, +); + +// 18. Dropdown Menu +// ----------------- + +$dropdownmenu-arrows: true; +$dropdownmenu-arrow-color: $anchor-color; +$dropdownmenu-arrow-size: 6px; +$dropdownmenu-arrow-padding: 1.5rem; +$dropdownmenu-min-width: 200px; +$dropdownmenu-background: null; +$dropdownmenu-submenu-background: $white; +$dropdownmenu-padding: $global-menu-padding; +$dropdownmenu-nested-margin: 0; +$dropdownmenu-submenu-padding: $dropdownmenu-padding; +$dropdownmenu-border: 1px solid $medium-gray; +$dropdown-menu-item-color-active: get-color(primary); +$dropdown-menu-item-background-active: transparent; + +// 19. Flexbox Utilities +// --------------------- + +$flex-source-ordering-count: 6; +$flexbox-responsive-breakpoints: true; + +// 20. Forms +// --------- + +$fieldset-border: 1px solid $medium-gray; +$fieldset-padding: rem-calc(20); +$fieldset-margin: rem-calc(18 0); +$legend-padding: rem-calc(0 3); +$form-spacing: rem-calc(16); +$helptext-color: $black; +$helptext-font-size: rem-calc(13); +$helptext-font-style: italic; +$input-prefix-color: $black; +$input-prefix-background: $light-gray; +$input-prefix-border: 1px solid $medium-gray; +$input-prefix-padding: 1rem; +$form-label-color: $black; +$form-label-font-size: rem-calc(14); +$form-label-font-weight: $global-weight-normal; +$form-label-line-height: 1.8; +$select-background: $white; +$select-triangle-color: $dark-gray; +$select-radius: $global-radius; +$input-color: $black; +$input-placeholder-color: $medium-gray; +$input-font-family: inherit; +$input-font-size: rem-calc(16); +$input-font-weight: $global-weight-normal; +$input-line-height: $global-lineheight; +$input-background: $white; +$input-background-focus: $white; +$input-background-disabled: $light-gray; +$input-border: 1px solid $medium-gray; +$input-border-focus: 1px solid $dark-gray; +$input-padding: $form-spacing / 2; +$input-shadow: inset 0 1px 2px rgba($black, 0.1); +$input-shadow-focus: 0 0 5px $medium-gray; +$input-cursor-disabled: not-allowed; +$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out; +$input-number-spinners: true; +$input-radius: $global-radius; +$form-button-radius: $global-radius; + +// 21. Label +// --------- + +$label-background: $primary-color; +$label-color: $white; +$label-color-alt: $black; +$label-palette: $foundation-palette; +$label-font-size: 0.8rem; +$label-padding: 0.33333rem 0.5rem; +$label-radius: $global-radius; + +// 22. Media Object +// ---------------- + +$mediaobject-margin-bottom: $global-margin; +$mediaobject-section-padding: $global-padding; +$mediaobject-image-width-stacked: 100%; + +// 23. Menu +// -------- + +$menu-margin: 0; +$menu-nested-margin: $global-menu-nested-margin; +$menu-items-padding: $global-menu-padding; +$menu-simple-margin: 1rem; +$menu-item-color-active: $white; +$menu-item-background-active: get-color(primary); +$menu-icon-spacing: 0.25rem; +$menu-state-back-compat: true; +$menu-centered-back-compat: true; +$menu-icons-back-compat: true; + +// 24. Meter +// --------- + +$meter-height: 1rem; +$meter-radius: $global-radius; +$meter-background: $medium-gray; +$meter-fill-good: $success-color; +$meter-fill-medium: $warning-color; +$meter-fill-bad: $alert-color; + +// 25. Off-canvas +// -------------- + +$offcanvas-sizes: ( + small: 250px, +); +$offcanvas-vertical-sizes: ( + small: 250px, +); +$offcanvas-background: $light-gray; +$offcanvas-shadow: 0 0 10px rgba($black, 0.7); +$offcanvas-inner-shadow-size: 20px; +$offcanvas-inner-shadow-color: rgba($black, 0.25); +$offcanvas-overlay-zindex: 11; +$offcanvas-push-zindex: 12; +$offcanvas-overlap-zindex: 13; +$offcanvas-reveal-zindex: 12; +$offcanvas-transition-length: 0.5s; +$offcanvas-transition-timing: ease; +$offcanvas-fixed-reveal: true; +$offcanvas-exit-background: rgba($white, 0.25); +$maincontent-class: 'off-canvas-content'; + +// 26. Orbit +// --------- + +$orbit-bullet-background: $medium-gray; +$orbit-bullet-background-active: $dark-gray; +$orbit-bullet-diameter: 1.2rem; +$orbit-bullet-margin: 0.1rem; +$orbit-bullet-margin-top: 0.8rem; +$orbit-bullet-margin-bottom: 0.8rem; +$orbit-caption-background: rgba($black, 0.5); +$orbit-caption-padding: 1rem; +$orbit-control-background-hover: rgba($black, 0.5); +$orbit-control-padding: 1rem; +$orbit-control-zindex: 10; + +// 27. Pagination +// -------------- + +$pagination-font-size: rem-calc(14); +$pagination-margin-bottom: $global-margin; +$pagination-item-color: $black; +$pagination-item-padding: rem-calc(3 10); +$pagination-item-spacing: rem-calc(1); +$pagination-radius: $global-radius; +$pagination-item-background-hover: $light-gray; +$pagination-item-background-current: $primary-color; +$pagination-item-color-current: $white; +$pagination-item-color-disabled: $medium-gray; +$pagination-ellipsis-color: $black; +$pagination-mobile-items: false; +$pagination-mobile-current-item: false; +$pagination-arrows: true; + +// 28. Progress Bar +// ---------------- + +$progress-height: 1rem; +$progress-background: $medium-gray; +$progress-margin-bottom: $global-margin; +$progress-meter-background: $primary-color; +$progress-radius: $global-radius; + +// 29. Prototype Arrow +// ------------------- + +$prototype-arrow-directions: ( + down, + up, + right, + left +); +$prototype-arrow-size: 0.4375rem; +$prototype-arrow-color: $black; + +// 30. Prototype Border-Box +// ------------------------ + +$prototype-border-box-breakpoints: $global-prototype-breakpoints; + +// 31. Prototype Border-None +// ------------------------- + +$prototype-border-none-breakpoints: $global-prototype-breakpoints; + +// 32. Prototype Bordered +// ---------------------- + +$prototype-bordered-breakpoints: $global-prototype-breakpoints; +$prototype-border-width: rem-calc(1); +$prototype-border-type: solid; +$prototype-border-color: $medium-gray; + +// 33. Prototype Display +// --------------------- + +$prototype-display-breakpoints: $global-prototype-breakpoints; +$prototype-display: ( + inline, + inline-block, + block, + table, + table-cell +); + +// 34. Prototype Font-Styling +// -------------------------- + +$prototype-font-breakpoints: $global-prototype-breakpoints; +$prototype-wide-letter-spacing: rem-calc(4); +$prototype-font-normal: $global-weight-normal; +$prototype-font-bold: $global-weight-bold; + +// 35. Prototype List-Style-Type +// ----------------------------- + +$prototype-list-breakpoints: $global-prototype-breakpoints; +$prototype-style-type-unordered: ( + disc, + circle, + square +); +$prototype-style-type-ordered: ( + decimal, + lower-alpha, + lower-latin, + lower-roman, + upper-alpha, + upper-latin, + upper-roman +); + +// 36. Prototype Overflow +// ---------------------- + +$prototype-overflow-breakpoints: $global-prototype-breakpoints; +$prototype-overflow: ( + visible, + hidden, + scroll +); + +// 37. Prototype Position +// ---------------------- + +$prototype-position-breakpoints: $global-prototype-breakpoints; +$prototype-position: ( + static, + relative, + absolute, + fixed +); +$prototype-position-z-index: 975; + +// 38. Prototype Rounded +// --------------------- + +$prototype-rounded-breakpoints: $global-prototype-breakpoints; +$prototype-border-radius: rem-calc(3); + +// 39. Prototype Separator +// ----------------------- + +$prototype-separator-breakpoints: $global-prototype-breakpoints; +$prototype-separator-align: center; +$prototype-separator-height: rem-calc(2); +$prototype-separator-width: 3rem; +$prototype-separator-background: $primary-color; +$prototype-separator-margin-top: $global-margin; + +// 40. Prototype Shadow +// -------------------- + +$prototype-shadow-breakpoints: $global-prototype-breakpoints; +$prototype-box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), + 0 2px 10px 0 rgba(0,0,0,.12); + +// 41. Prototype Sizing +// -------------------- + +$prototype-sizing-breakpoints: $global-prototype-breakpoints; +$prototype-sizing: ( + width, + height +); +$prototype-sizes: ( + 25: 25%, + 50: 50%, + 75: 75%, + 100: 100% +); + +// 42. Prototype Spacing +// --------------------- + +$prototype-spacing-breakpoints: $global-prototype-breakpoints; +$prototype-spacers-count: 3; + +// 43. Prototype Text-Decoration +// ----------------------------- + +$prototype-decoration-breakpoints: $global-prototype-breakpoints; +$prototype-text-decoration: ( + overline, + underline, + line-through, +); + +// 44. Prototype Text-Transformation +// --------------------------------- + +$prototype-transformation-breakpoints: $global-prototype-breakpoints; +$prototype-text-transformation: ( + lowercase, + uppercase, + capitalize +); + +// 45. Prototype Text-Utilities +// ---------------------------- + +$prototype-utilities-breakpoints: $global-prototype-breakpoints; +$prototype-text-overflow: ellipsis; + +// 46. Responsive Embed +// -------------------- + +$responsive-embed-margin-bottom: rem-calc(16); +$responsive-embed-ratios: ( + default: 4 by 3, + widescreen: 16 by 9, +); + +// 47. Reveal +// ---------- + +$reveal-background: $white; +$reveal-width: 600px; +$reveal-max-width: $global-width; +$reveal-padding: $global-padding; +$reveal-border: 1px solid $medium-gray; +$reveal-radius: $global-radius; +$reveal-zindex: 1005; +$reveal-overlay-background: rgba($black, 0.45); + +// 48. Slider +// ---------- + +$slider-width-vertical: 0.5rem; +$slider-transition: all 0.2s ease-in-out; +$slider-height: 0.5rem; +$slider-background: $light-gray; +$slider-fill-background: $medium-gray; +$slider-handle-height: 1.4rem; +$slider-handle-width: 1.4rem; +$slider-handle-background: $primary-color; +$slider-opacity-disabled: 0.25; +$slider-radius: $global-radius; + +// 49. Switch +// ---------- + +$switch-background: $medium-gray; +$switch-background-active: $primary-color; +$switch-height: 2rem; +$switch-height-tiny: 1.5rem; +$switch-height-small: 1.75rem; +$switch-height-large: 2.5rem; +$switch-radius: $global-radius; +$switch-margin: $global-margin; +$switch-paddle-background: $white; +$switch-paddle-offset: 0.25rem; +$switch-paddle-radius: $global-radius; +$switch-paddle-transition: all 0.25s ease-out; + +// 50. Table +// --------- + +$table-background: $white; +$table-color-scale: 5%; +$table-border: 1px solid smart-scale($table-background, $table-color-scale); +$table-padding: rem-calc(8 10 10); +$table-hover-scale: 2%; +$table-row-hover: darken($table-background, $table-hover-scale); +$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale); +$table-is-striped: true; +$table-striped-background: smart-scale($table-background, $table-color-scale); +$table-stripe: even; +$table-head-background: smart-scale($table-background, $table-color-scale / 2); +$table-head-row-hover: darken($table-head-background, $table-hover-scale); +$table-foot-background: smart-scale($table-background, $table-color-scale); +$table-foot-row-hover: darken($table-foot-background, $table-hover-scale); +$table-head-font-color: $body-font-color; +$table-foot-font-color: $body-font-color; +$show-header-for-stacked: false; +$table-stack-breakpoint: medium; + +// 51. Tabs +// -------- + +$tab-margin: 0; +$tab-background: $white; +$tab-color: $primary-color; +$tab-background-active: $light-gray; +$tab-active-color: $primary-color; +$tab-item-font-size: rem-calc(12); +$tab-item-background-hover: $white; +$tab-item-padding: 1.25rem 1.5rem; +$tab-content-background: $white; +$tab-content-border: $light-gray; +$tab-content-color: $body-font-color; +$tab-content-padding: 1rem; + +// 52. Thumbnail +// ------------- + +$thumbnail-border: 4px solid $white; +$thumbnail-margin-bottom: $global-margin; +$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2); +$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5); +$thumbnail-transition: box-shadow 200ms ease-out; +$thumbnail-radius: $global-radius; + +// 53. Title Bar +// ------------- + +$titlebar-background: $black; +$titlebar-color: $white; +$titlebar-padding: 0.5rem; +$titlebar-text-font-weight: bold; +$titlebar-icon-color: $white; +$titlebar-icon-color-hover: $medium-gray; +$titlebar-icon-spacing: 0.25rem; + +// 54. Tooltip +// ----------- + +$has-tip-cursor: help; +$has-tip-font-weight: $global-weight-bold; +$has-tip-border-bottom: dotted 1px $dark-gray; +$tooltip-background-color: $black; +$tooltip-color: $white; +$tooltip-padding: 0.75rem; +$tooltip-max-width: 10rem; +$tooltip-font-size: $small-font-size; +$tooltip-pip-width: 0.75rem; +$tooltip-pip-height: $tooltip-pip-width * 0.866; +$tooltip-radius: $global-radius; + +// 55. Top Bar +// ----------- + +$topbar-padding: 0.5rem; +$topbar-background: $light-gray; +$topbar-submenu-background: $topbar-background; +$topbar-title-spacing: 0.5rem 1rem 0.5rem 0; +$topbar-input-width: 200px; +$topbar-unstack-breakpoint: medium; + +// 56. Xy Grid +// ----------- + +$xy-grid: true; +$grid-container: $global-width; +$grid-columns: 12; +$grid-margin-gutters: ( + small: 20px, + medium: 30px +); +$grid-padding-gutters: $grid-margin-gutters; +$grid-container-padding: $grid-padding-gutters; +$grid-container-max: $global-width; +$xy-block-grid-max: 8; + diff --git a/explorer/website/frontend/sass/app.scss b/explorer/website/frontend/sass/app.scss index 3f2cae90..a04d0f36 100644 --- a/explorer/website/frontend/sass/app.scss +++ b/explorer/website/frontend/sass/app.scss @@ -1 +1,2 @@ @import '../node_modules/datatables.net-dt/css/jquery.dataTables.css'; +@import './main.scss'; \ No newline at end of file diff --git a/explorer/website/frontend/sass/main.scss b/explorer/website/frontend/sass/main.scss new file mode 100644 index 00000000..5de7c908 --- /dev/null +++ b/explorer/website/frontend/sass/main.scss @@ -0,0 +1,20 @@ +.header-search { + margin-bottom:0; + border-radius:0.5rem; + height:3rem; +} + +.container { + padding:8rem 0; +} + +.top-bar-container { + h1 { + margin-bottom:0; + } +} + +.width-100 { + width: 100%; +} + diff --git a/explorer/website/frontend/views/layouts/default.hbs b/explorer/website/frontend/views/layouts/default.hbs index ae36f203..e13db45a 100644 --- a/explorer/website/frontend/views/layouts/default.hbs +++ b/explorer/website/frontend/views/layouts/default.hbs @@ -11,22 +11,84 @@ - - - - - - + + + {{ title }} +
+
+
+

Synapse

+ Block Explorer +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ + {{{body}}} + + + diff --git a/explorer/website/frontend/views/pages/home.hbs b/explorer/website/frontend/views/pages/home.hbs index 6fd4f3fa..a47f3d88 100644 --- a/explorer/website/frontend/views/pages/home.hbs +++ b/explorer/website/frontend/views/pages/home.hbs @@ -1,3 +1,6 @@ +{{> maintabs }} + + diff --git a/explorer/website/frontend/views/partials/blocktable.hbs b/explorer/website/frontend/views/partials/blocktable.hbs index 02cd7a6e..ac5d9e49 100644 --- a/explorer/website/frontend/views/partials/blocktable.hbs +++ b/explorer/website/frontend/views/partials/blocktable.hbs @@ -1,6 +1,4 @@ -
- - +
@@ -12,23 +10,15 @@
ID
-
-